最近のサイトは、ほとんどログイン機能にTwitterでログインする機能があるかと思います。
実際にどうやってユーザと判別して、認証に成功するのか、仕組みが知りたかったので実装してみました。
用意するものは以下となります。
・Consumer Key(API Key)とConsumer Secret(API Secret)
・TwitterOAuthライブラリ
・login.php、callback.php、complete.html、error.html
TwitterのAPIを取得
APIキーを取得するために、Twitter Developersにアクセスし、アプリを作成します。
https://apps.twitter.com/
詳しいTwitter Developersの登録するサイトは以下を参考にしました。
Oauth認証に必要なAPI KeyとAPI Secretを取得できます。
https://syncer.jp/Web/API/Twitter/REST_API/
また、Twitter Developersの設定でTwitterCallback URLを今回実装するcallback.phpに設定して
ください。
TwitterOAuthのライブラリを取得
以下のgitからTwitterOAuthライブラリをダウンロードします。
https://github.com/abraham/twitteroauth
ライブラリを使って実装
Developersで作成したアプリのConsumer Key (API Key)、Consumer Secret (API Secret)、
callbackする時に飛ぶページの場所をそれぞれ定義します。
1 2 3 4 |
//login.php define('TWITTER_API_KEY', 'アプリのAPIキー'); //Consumer Key (API Key) define('TWITTER_API_SECRET', 'アプリのAPIシークレット'); //Consumer Secret (API Secret) define('CALLBACK_URL', 'http:// ・・サイトのドメイン・・ /callback.php'); //Twitterから認証した時に飛ぶページ場所 |
次に、API KeyとAPI Secretを使って、Twitterからリクエストトークンを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//login.php //TwitterOAuthのインスタンスを生成し、Twitterからリクエストトークンを取得する $twitter_connect = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET); $request_token = $twitter_connect->oauth('oauth/request_token', array('oauth_callback' => CALLBACK_URL)); //リクエストトークンはcallback.phpでも利用するのでセッションに保存する $_SESSION['oauth_token'] = $request_token['oauth_token']; $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; //Twitterの認証画面へリダイレクト $url = $twitter_connect->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token'])); header('Location: '.$url); exit; |
リクエストトークンを使って、今度はアクセストークンを取得します。
1 2 3 4 |
//callback.php //リクエストトークンを使い、アクセストークンを取得する $twitter_connect = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access_token = $twitter_connect->oauth('oauth/access_token', array('oauth_verifier' => $_GET['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token'])); |
最後にアクセストークンを使ってユーザのTwitter情報(プロフィール、投稿など)を取得しています。
問題なくユーザー情報を取得できたらcomplete.htmlに移動し、それ以外はerror.htmlにページに移動するようにしてい
ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//callback.php //アクセストークンからユーザの情報を取得する $user_connect = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']); $user_info = $user_connect->get('account/verify_credentials');//アカウントの有効性を確認するためのエンドポイント //ユーザ情報が取得できればcomplete.html、それ以外はerror.htmlに移動する if(isset($user_info['id_str'])){ $_SESSION['user_info'] = $user_info; header("Location:complete.html"); exit; } else{ header("Location:error.html"); exit; } |
APIのリファレンスに関しては以下のサイトで日本語で解説されていますので、参考にさせて頂きました。
https://syncer.jp/twitter-api-matome/get/account/verify_credentials
サイトのログイン機能としてTwitterのOauth認証を実装すればユーザの情報を取得し判別することで、
ログイン機能が実装することが可能となります。
途中でトークンの受け渡しが出来ていない場合、不正なアクセスがあった場合などバリデーション処理をおすすめします。
ぜひ、ためしてみて下さい。