cakephp2.x OAuth の使い方

2013年4月7日更新 view: 544 view
photoBy: http://blog-imgs-26.fc2.com/s/l/o/slowsr/key.jpg

twitterログイン機能をつけたいんだけど

そんなときの方法。
ただ、cakephp1.xシリーズのライブラリだと動かないので別途DLする必要がある。

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

上記ページの下部、
OAuth consumer component より
ファイルをダウンロード。

前提

  • TwitterのOAuthでログインし、プロフィールを取得
  • cakephp2.x シリーズ
  • users/login にて ログインさせる

ファイルの準備

/app/Plugin/OAuth/Controller/Component/OAuthConsumerComponent.php
/app/Plugin/OAuth/Controller/Component/OAuthConsumers/TwitterConsumer.php
/app/Plugin/OAuth/Controller/Component/OAuthConsumers/AbstractConsumer.php

この3つのファイルを用意。

ただし、TwitterConsumer.phpは用意されていないので、自分で作る。

TwitterConsumer.php

// Controller/Component/OAuthConsumers/TwitterConsumer.php
class TwitterConsumer extends AbstractConsumer {
    public function __construct() {
        parent::__construct('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');
    }
}

ログインページへ飛ばす処理 & プロフィールを表示する処理

一気にいきます。

スポンサードリンク

UsersController.php

<?php
App::uses('AppController', 'Controller');

CakePlugin::loadAll();

class UsersController extends AppController {
    
    
    var $components = array(
        'OAuth.OAuthConsumer',
        'Session',
        'Cookie'
    );
    
    public function login() {
        $requestToken = $this->OAuthConsumer->getRequestToken('Twitter', 'https://api.twitter.com/oauth/request_token', 'http://' . $_SERVER['HTTP_HOST'] . '/users/callback/');

        if ($requestToken) {
         // $this->Session->write('twitter_request_token', $requestToken);
            $this->Cookie->write('twitter_request_token',Set::reverse($requestToken), false, '+10 years');    
            $this->redirect('https://api.twitter.com/oauth/authorize?oauth_token=' . $requestToken->key);
        } else {
            // an error occured when obtaining a request token
        }
    }
    
    public function callback() {
        
        $requestToken = Set::map($this->Cookie->read('twitter_request_token'));
        $accessToken = $this->OAuthConsumer->getAccessToken('Twitter', 'https://api.twitter.com/oauth/access_token', $requestToken);
        if ($accessToken) {
            $profile = json_decode($this->OAuthConsumer->get('Twitter',$accessToken->key, $accessToken->secret, 'http://api.twitter.com/1/account/verify_credentials.json'));            
            $profile = Set::reverse($profile);
            pr($profile);
        }
        
        $this->autoRender = false;
    }
    
    

}

はい。これ。
で、気をつけて欲しいのが気をつけて欲しいのが requestToken の 値。
上記外国のページ通りやると思いっきりエラーになる。

理由はおそらく、返値がオブジェクト型になっているので、Set::map を駆使して配列に戻す必要がある。

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

4月22日 ( 日 ) にアクセスが多かった記事はこちら!