PEARでSign in with Twitterを実装する
どうもこんばんは。何番煎じかわかりませんが自分用のメモとしてPEARを使ってのTwitter のOauth 認証の作り方を書きます。最近、Cacooとか読書メーターとか、Sign in with Twitter とかいうログインボタンありますよね。あーいうのを作ります。
PEARのインストールとかは前の記事でやっているので、そちらをご覧ください。
さて、まずTwitter のdeveloper 登録をします。https://dev.twitter.com/ に自分のTwitter アカウントでログインしてください。すると、右下にCreate an App という文字があると思うので、それをクリック(Twitter developers は全部英語で書かれているので、ちょっと混乱するかもですが、気合で乗り切りましょう)
すると、アプリケーションの登録フォームが出てくるので、サクっと除法を入力
- Name
- アプリケーションの名前。〜〜から投稿 という風にクライアント名が表示される。
- Description
- アプリの説明。特に何を書いても問題なし。
- WebSite
- 何でもOK。私は自分のブログ(これ)を指定してますが。「〜〜から投稿」というのをクリックすると、ここで指定されたアドレスにリンクされる。
- Callback URL
- 地味に重要。ログイン処理を行うアプリのURLを記載する。
はい。登録はこれだけ。あとは規約を読んで同意し、英字か何かを入力して次へ。
すると、My Application Details みたいな画面が出てくるので、そこで「Consumer key」と「Consumer secret」を確認する。この鍵を用いて、Twitterへのログイン処理をする。
ここまでできたら、あとはコードをガリガリ書くだけ。
私はとりあえず、こんな感じで描いてみた。
// ライブラリのロード require_once("Services/Twitter.php"); require_once("HTTP/OAuth/Consumer.php"); // OAuth関連。 define('TWITTER_CONSUMER_KEY', '※先程取得した※consumer_key'); define('TWITTER_CONSUMER_SECRET', '※先程取得した※consumer_key_secret'); // ログイン関連のURL情報 define('TWITTER_REQUEST_TOKEN', 'http://api.twitter.com/oauth/request_token'); define('TWITTER_ACCESS_TOKEN', 'http://api.twitter.com/oauth/access_token'); define('TWITTER_AUTHORIZE', 'http://twitter.com/oauth/authenticate'); define('TWITTER_CALLBACK', '先程指定したCallback URL'); /* * Sign in with Twitter ボタンをその場に生成する。 * @param $consumer OAuth認証用に作成したHTTP_OAuth_Consumerインスタンス */ function signinwithTwitter($consumer) { // リクエストトークンの取得 $consumer->getRequestToken(TWITTER_REQUEST_TOKEN, TWITTER_CALLBACK); // トークンをセッションに保存(この部分必要あるか…??→クロスサイトスクリプティング対策に必要) $_SESSION['twitter_request_token'] = $consumer->getToken(); $_SESSION['twitter_request_token_secret'] = $consumer->getTokenSecret(); $auth_url = $consumer->getAuthorizeURL(TWITTER_AUTHORIZE); print('<a href="'.$auth_url.'"><img src="http://si0.twimg.com/images/dev/buttons/sign-in-with-twitter-d.png" /></a>'); } /* * Twitterでのログイン認証を実現する. */ function login_Twitter() { // OAuth に必要なインスタンスの作成 $oauth = new HTTP_OAuth_Consumer(TWITTER_CONSUMER_KEY,TWITTER_CONSUMER_SECRET); $oauth_flag = false; // セッションを開始する。 session_start(); if(empty($_SESSION['twitter_access_token']) && empty($_GET['oauth_verifier'])) { // 初回ログイン時 // sign in with Twitter のアイコンを表示 signinwithTwitter($oauth); } else if(isset($_GET['oauth_verifier'])) { // Twitter からCALLBACKを呼ばれて帰ってきた時。 // Oauthにリクエストトークンをセットする try { $oauth->setToken( $_SESSION['twitter_request_token']); $oauth->setTokenSecret( $_SESSION['twitter_request_token_secret']); // アクセストークンを取得(これが大事) $oauth->getAccessToken(TWITTER_ACCESS_TOKEN, $_GET['oauth_verifier']); $_SESSION['twitter_access_token'] = $oauth->getToken(); $_SESSION['twitter_access_token_secret'] = $oauth->getTokenSecret(); } catch (Exception $e){ // エラーです。 } // これでログインされました } else { // ログインされてるはず } } /* * Twitter からログアウトする。それ以上でもそれ以下でも無いです */ function logout_Twitter() { unset($_SESSION['twitter_access_token']); unset($_SESSION['twitter_access_token_secret']); } // テスト------------------------------------------------------ login_Twitter();
はい。これで動きました。
もしかしたら、リクエストトークンの発行と、アクセストークンの取得は別ファイルにする人が多いかもしれない…