Hatena::ブログ(Diary)

BUENA VISTA SOCIAL BLOG このページをアンテナに追加 RSSフィード Twitter

2009年11月23日

[][]CakePHPTwitterマッシュアップを作る#4

目標

すべてのページに「twitterログイン」を用意してOAuthにより認証できるようにする

使ったもの

http://code.42dh.com/oauth/

からOAuth consumer componentをダウンロード

解凍すると

  • controllers
    • conponents
      • oauth_consumers
        • abstract_consumer.php
      • oauth_consumer.php
  • vendors

が入っています。

app/vendorsに

OAuthフォルダを入れる

app/controllers/conponentsに

oauth_consumersフォルダ、oauth_consumer.phpを入れて準備完了

Twitterのキー

第2回で作成した

  • コンシューマキー
  • シークレットキー

を、app/controllers/components/oauth_consumers/twitter_consumer.phpを作成し

class TwitterConsumer extends AbstractConsumer {
    public function __construct() {
	parent::__construct('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');
    }
}

と、記述

twitter連携用コントローラの作成

twitter_controller.phpをapp/controllers下に作成し

class TwitterController extends AppController {
    public $uses = array('User');
    public $components = array('OauthConsumer'); <--これ重要(oauthコンポーネントの呼び出し)

    public function twitter() {
        $requestToken = $this->OauthConsumer->getRequestToken('Twitter', 'http://twitter.com/oauth/request_token', 'http://localhost/twitter/twitter_callback'); <--コールバックしてもらうURLを指定、ローカルでもOK。今回はローカルテストのため
        $this->Session->write('twitter_request_token', $requestToken);
        $this->redirect('http://twitter.com/oauth/authorize?oauth_token=' . $requestToken->key);
    }

    public function twitter_callback() {
        if (!empty($this->params['url']['denied']))
        {
          $this->Session->setFlash('拒否されました');
          $this->redirect('/');
        }
        $requestToken = $this->Session->read('twitter_request_token');
        $accessToken = $this->OauthConsumer->getAccessToken('Twitter', 'http://twitter.com/oauth/access_token', $requestToken);
        if (empty($accessToken)) $this->redirect('/');
        $json = $this->OauthConsumer->get('Twitter', $accessToken->key, $accessToken->secret, 'http://twitter.com/account/verify_credentials.json', array()); <--認証ユーザ情報の取得
        $this->Session->setFlash('認証OK');
        //ユーザ情報を登録
/***** ここで受け取ったjsonの情報をDBに入れるなりごにょごにょ  ******/
        $this->User->create();
        $this->User->save(json_decode($json, true));
/***** ポストするときとかは以下な感じ *****/
        $this->OauthConsumer->post('Twitter', $accessToken->key, $accessToken->secret, 'http://twitter.com/statuses/update.json', array('status' => '私がムスカ大佐だ。'));
        $this->redirect('/');
    }
}

とりあえずTwitterOAuthの準備は整った。

後はビュー

app/views/layouts/default.ctpに

<?php echo $html->link("ついったログイン", "/twitter/twitter"); ?>

とか書いておけばOK

twitterコントローラでユーザ情報をセッション/DBに入れるなり、アクセストークンをセッション/DBに入れるなりはご自由に

でもセキュリティ的にトークンをセッションはまずいかも。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証