November 27, 2011

FuelPHP + Zend Framework でTwitterのOauthをする

中途半端な部分もありますが、コントローラのサンプルを書いておきます。

Zendは1.11.10を使いました。(2にしたいな。。。)

printしている箇所以降は、実際にはDB保存したり、
認証完了後のURLにリダイレクトしたり。となります。

バリデーションについては書いていませんが、実際には、当然、行いましょう。

$accessToken->user_idでツイッタAPIに問い合わせて、
再度ユーザ情報を取得し直せば、より安全と思います。

signinアクションにアクセスするとツイッタにリダイレクトされます。
ツイッタでの認証後、callbackに戻る流れです。

以下の3箇所は、適切な内容に書き換えて下さい。
* [This Controller URL]
* [consumerKey]
* [consumerSecret]

Session::set('twitter', array('accessToken' => serialize($accessToken)));
の箇所は、他所で
$twitter = Session::get('twitter');
$accessToken = unserialize($twitter['accessToken']);
のようにして使用される想定です。

class Controller_Twitter extends Controller_Template {

    public function before()
    {
        parent::before();
        require_once 'Zend/Loader/Autoloader.php';
        Zend_Loader_Autoloader::getInstance();
    }

    public function action_signin()
    {
        $twitter = array(
            'callbackUrl' => '[This Controller URL]/callback/',
            'siteUrl' => 'http://twitter.com/oauth',
            'consumerKey' => '[consumerKey]',
            'consumerSecret' => '[consumerSecret]',
            'authorizeUrl' => 'http://twitter.com/oauth/authenticate',
        );

        $zoc = new Zend_Oauth_Consumer($twitter);
        $requestToken = $zoc->getRequestToken();

        Session::set('zoc', $zoc);
        Session::set('twitter', array('requestToken' => serialize($requestToken)));
        Session::write();

        $zoc->redirect();
    }

    public function action_callback()
    {
        $sess = Session::get('twitter');
        $zoc = Session::get('zoc');

        if ($_GET && $sess['requestToken'])
        {
            $requestToken = unserialize($sess['requestToken']);
            $accessToken = $zoc->getAccessToken($_GET, $requestToken);
            Session::set('twitter', array('accessToken' => serialize($accessToken)));

            print(' [user_id] : '.$accessToken->user_id);
            print(' [screen_name] : '.$accessToken->screen_name);
            print(' [oauth_token] : '.$accessToken->oauth_token);
            print(' [oauth_token_secret] : '.$accessToken->oauth_token_secret);
            exit();
        }
        else
        {
            Request::show_404();
        }
    }
}

No comments:

Post a Comment