【PHP】TwitterのOAuth認証を使ったログイン
TwitterのOAuth認証をPHPで実装します。
ログアウト処理がうまくできてないのでご助言いただけるとありがたいです…!
準備
ここでアプリケーションを登録します。
アプリケーションの種類はブラウザアプリケーション。
callbackURLにはlocalhostが指定できないので適当に登録します。
登録すると、Consumer keyとConsumer secretが得られます。
これを使って認証します。
Access token取得の流れ
- Consumer keyとConsumer secretを使ってRequest tokenとRequest secretを取得
- このとき、callbackURLを指定する
- Request tokenとRequest secretを使ってAuthorizeURL(Twitterの認証URL)を取得
- ユーザが認証ボタンを押す
- callbackURLにパラメータ(oauth_verifier)が付いて返ってくる(GET送信される)
- Consumer key、Consumer secret、Request token、Request secret、そしてoauth_verifierを使ってAccess tokenを取得
ややこしや!!
ソース
- testoauth.php
<?php session_start(); require_once("twitteroauth.php");// ライブラリの読み込み // セッションにアクセストークンがなかったらloginページに飛ぶ if($_SESSION['oauth_token']===NULL && $_SESSION['oauth_token_secret']===NULL){ header("Location: login.php"); } $user_id = $_SESSION['user_id']; $screen_name = $_SESSION['screen_name']; echo "<html><head><title>top</title></head><body>"; echo "<p>ようこそ!".$screen_name."さん</p>"; echo "<p>".$user_id."</p>"; echo "<p><a href=\"./logout.php\">ログアウト</a></p>" ?>
- login.php
- 本当はここにワンクッション置いたほうがいいかもしれません…
<?php session_start(); require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "自分で取得したもの"; // Consumer secretの値 $consumer_secret = "自分で取得したもの"; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret); // callbackURLを指定してRequest tokenを取得 $tok = $to->getRequestToken("http://localhost/testtwitter/callback.php"); // セッションに保存 $_SESSION['request_token']=$token=$tok['oauth_token']; $_SESSION['request_token_secret'] = $tok['oauth_token_secret']; // AuthorizeURLを取得 $url = $to->getAuthorizeURL($token); echo "<html><head><title>login</title></head><body><a href=\"".$url."\">ログイン</a></body></html>"; ?>
- callback.php
<?php session_start(); require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "自分で取得したもの"; // Consumer secretの値 $consumer_secret = "自分で取得したもの"; // パラメータからoauth_verifierを取得 $verifier = $_GET['oauth_verifier']; // Consumer key,Consumer secret, Request token, Request secretを使ってOAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$_SESSION['request_token'],$_SESSION['request_token_secret']); // oauth_verifierを使ってAccess tokenを取得 $access_token = $to->getAccessToken($verifier); // token keyとtoken secret, user_id, screen_nameをセッションに保存 $_SESSION['oauth_token'] = $access_token['oauth_token']; $_SESSION['oauth_token_secret'] = $access_token['oauth_token_secret']; $_SESSION['user_id'] = $access_token['user_id']; $_SESSION['screen_name'] = $access_token['screen_name']; // TOPページへ header("Location: testoauth.php"); ?>