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