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