TwitterOAuthを利用し、Twitterのアカウントでログインができる認証機能を作成します。
TwitterOAuthはTwitterのOAuthをサポートするAPIを利用するためのライブラリで、アプリケーションにTwitterの投稿機能などを実装する時などに利用します。
TwitterOAuthはComposerで管理することができますが、今回はTwitterOAuthのリンクから直接ファイルをダウンロードして利用します(twitteroauth-masterファイル)。
※デモはアカウント名などを表示させているだけで、投稿したり、ユーザ情報をデータベースには保存したりすることはございません。
スポンサーリンク
今回作成したアプリケーション(デモ画面)は、Twitterのアカウント名などのユーザ情報を取得する部分までを実装しました。
プログラミングの前にまずは以下のリンク先ページにてアプリの申請登録をおこない、「Consumer Key(API Key)」と「Consumer Secret(API Secret)」を取得しておきます。またセッティング(Settings)画面の「Callback URL」の部分はのちに説明するcallback.phpを、自分でアップした先のURLを登録しておいて下さい。
Twitter Application Management
OAuth自体の詳しい説明はしませんが、今回作成するTwitterOAuthによる認証部分の流れは、以下の様になります。
1. リクエストトークンを取得する。(login.php)
2. リクエストトークンをURLのパラメータに付けて、Twitter認証画面へリダイレクトする。(login.php)
3. ユーザが認証許可すると「Callback URL」で指定したファイル(callback.php)にリダイレクトされる。その際に、oauth_tokenとoauth_verifierがURLのパラメータに付けられている。
4. 3で取得したパラメータ等の値を元にアクセストークンを取得する。(callback.php)
5. アクセストークンを元にユーザ情報を取得する。(callback.php)
以上が大まかな流れですが、OAuthを利用するプログラミングにおいて、アクセストークンを取得することがの第一の目的だと考えても良いでしょう。
ディレクトリ構成
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php session_start(); header("Content-type: text/html; charset=utf-8"); if(!isset($_SESSION['access_token'])){ echo "<a href='login.php'>Twitterでログイン</a>"; }else{ //callback.phpからセッションを受け継ぐ echo "<p>ID:". $_SESSION['id'] . "</p>"; echo "<p>名前:". $_SESSION['name'] . "</p>"; echo "<p>スクリーン名:". $_SESSION['screen_name'] . "</p>"; echo "<p>最新ツイート:" .$_SESSION['text']. "</p>"; echo "<p><img src=".$_SESSION['profile_image_url_https']."></p>"; echo "<p>access_token:". $_SESSION['access_token']['oauth_token'] . "</p>"; echo "<p><a href='logout.php'>ログアウト</a></p>"; } |
Twitterで認証した場合に、ユーザ情報が表示されます。
login.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php session_start(); define("Consumer_Key", "◯◯◯◯◯"); define("Consumer_Secret", "◯◯◯◯◯"); //Callback URL define('Callback', 'http://◯◯◯/callback.php'); //ライブラリを読み込む require "twitteroauth-master/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; //TwitterOAuthのインスタンスを生成し、Twitterからリクエストトークンを取得する $connection = new TwitterOAuth(Consumer_Key, Consumer_Secret); $request_token = $connection->oauth("oauth/request_token", array("oauth_callback" => Callback)); //リクエストトークンはcallback.phpでも利用するのでセッションに保存する $_SESSION['oauth_token'] = $request_token['oauth_token']; $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; // Twitterの認証画面へリダイレクト $url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token'])); header('Location: ' . $url); |
このファイルではリクエストトークンを取得し、Twitterの認証画面へリダイレクトさせています。
4・5行目
アプリを登録して取得した「Consumer Key」と「Consumer Secret」を設定します。
8行目
セッティング(Settings)画面で登録した「Callback URL」を設定します。
callback.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?php session_start(); define("Consumer_Key", "◯◯◯◯◯"); define("Consumer_Secret", "◯◯◯◯◯"); //ライブラリを読み込む require "twitteroauth-master/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; //oauth_tokenとoauth_verifierを取得 if($_SESSION['oauth_token'] == $_GET['oauth_token'] and $_GET['oauth_verifier']){ //Twitterからアクセストークンを取得する $connection = new TwitterOAuth(Consumer_Key, Consumer_Secret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_GET['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token'])); //取得したアクセストークンでユーザ情報を取得 $user_connection = new TwitterOAuth(Consumer_Key, Consumer_Secret, $access_token['oauth_token'], $access_token['oauth_token_secret']); $user_info = $user_connection->get('account/verify_credentials'); // ユーザ情報の展開 //var_dump($user_info); //適当にユーザ情報を取得 $id = $user_info->id; $name = $user_info->name; $screen_name = $user_info->screen_name; $profile_image_url_https = $user_info->profile_image_url_https; $text = $user_info->status->text; //各値をセッションに入れる $_SESSION['access_token'] = $access_token; $_SESSION['id'] = $id; $_SESSION['name'] = $name; $_SESSION['screen_name'] = $screen_name; $_SESSION['text'] = $text; $_SESSION['profile_image_url_https'] = $profile_image_url_https; header('Location: index.php'); exit(); }else{ header('Location: index.php'); exit(); } |
アクセストークンを取得することが目的のファイルとなります。
ユーザが認証すると呼ばれるファイルで、その際にoauth_tokenとoauth_verifierがパラメータとして付加されて以下のようなURLでリダイレクトされてきます。12行目においてそれぞれの値が取得できたかどうかを判定しています。
以下のようなURLでリダイレクトされてくる。
1 |
http://◯◯◯/callback.php?oauth_token=lAIGeAAAAAAAt-olAAABU1AEoS4&oauth_verifier=bWXX6MlXNb0HoFtC3mWPZpq3JUrt5wnZ |
今回は、最終的にユーザのTwitterアカウント名などを表示させているだけですが、実際にはそれらユーザ情報をデータベースに登録していきます。アクセストークン($access_token)は、一ユーザ対して一意的に与えられるので、この値をデータベースなどに格納しておけば、既存のユーザであるのかを判定することができます。つまり、アクセストークンがあればいつでもユーザ情報を取得することができます。
logout.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php session_start(); header("Content-type: text/html; charset=utf-8"); //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); echo "<p>ログアウトしました。</p>"; echo "<a href='index.php'>はじめのページへ</a>"; |
参照ページ
OAuth Send secure authorized requests to the Twitter API