2009年11月23日
■[CakePHP][twitter]CakePHPでTwitterマッシュアップを作る#4
目標
すべてのページに「twitterでログイン」を用意してOAuthにより認証できるようにする
使ったもの
からOAuth consumer componentをダウンロード
解凍すると
- controllers
- 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に入れるなりはご自由に
トラックバック - http://d.hatena.ne.jp/hagimi/20091123/p2




