前回の記事に引き続き、TwitterでOAuth認証をcodebird.phpを使用して作ってみました。
4つのファイルを使用して多少冗長ではありますが、ログイン、ログアウトできます。
どのファイルにアクセスしてもログインしてなければ、”unlogin.php”に飛ぶようにしてあります。
ファイル名:unlogin.php
<?php session_start(); session_regenerate_id(TRUE); require_once('codebird.php'); Codebird::setConsumerKey('TwitterカスタマーID', 'Twitterカスタマーシークレット'); $callback_url = '/***/callback.php'; // コールバックするURLを指定 $server_host = $_SERVER['HTTP_HOST']; // アクセストークンのチェック if (isset($_SESSION['oauth_token']) && $_SESSION['oauth_token'] !== NULL && isset($_SESSION['oauth_token_secret']) && $_SESSION['oauth_token_secret'] !== NULL) { header('Location: ./'); return; } else { // gets a request token $cb = Codebird::getInstance(); $reply = $cb->oauth_requestToken(array( 'oauth_callback' => 'http://' . $server_host . $callback_url )); // stores it $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $_SESSION['request_token'] = $reply->oauth_token; $_SESSION['request_token_secret'] = $reply->oauth_token_secret; // gets the access token $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $auth_url = $cb->oauth_authorize(); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Twitterログインテスト</title> </head> <body> ログインしていません。<br/> ログインしますか?<br/><br/> <?php echo '<a href="' . $auth_url . '">Twitterでログイン</a>'; ?> </body> </html>
ファイル名:callback.php
<?php session_start(); session_regenerate_id(TRUE); require_once('codebird.php'); Codebird::setConsumerKey('TwitterカスタマーID', 'Twitterカスタマーシークレット'); $cb = Codebird::getInstance(); //URLパラメータからoauth_verifierを取得 if (isset($_GET['oauth_verifier']) && $_GET['oauth_verifier'] != '') { $sVerifier = $_GET['oauth_verifier']; } else { // echo 'oauth_verifier error!'; session_destroy(); $_SESSION[''] = array(); unset($_GET['oauth_verifier']); header("Location: ./unlogin.php"); die(); } //リクエストトークンでOAuthオブジェクトの生成 $cb->setToken($_SESSION['request_token'], $_SESSION['request_token_secret']); $reply = $cb->oauth_accessToken(array( 'oauth_verifier' => $_GET['oauth_verifier'] )); try { if (!isset($reply)) { throw new Exception("replyがありません"); } if (isset($reply->httpstatus) && $reply->httpstatus == 200) { $_SESSION['oauth_token'] = $reply->oauth_token; $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; $_SESSION['user_id'] = $reply->user_id; $_SESSION['screen_name'] = $reply->screen_name; } elseif ($reply->httpstatus == 401) { throw new Exception("httpstatus:401エラーです"); } //loginページへリダイレクト header("Location: unlogin.php"); die(); }catch(Exception $e) { echo $e; //debug die(); // debug session_destroy(); $_SESSION[''] = array(); unset($_GET['oauth_verifier']); header("Location: ./unlogin.php"); die(); }
ファイル名:index.php
<?php session_start(); session_regenerate_id(TRUE); require_once('codebird.php'); Codebird::setConsumerKey('TwitterカスタマーID', 'Twitterカスタマーシークレット'); $cb = Codebird::getInstance(); // アクセストークンのチェック if (isset($_SESSION['oauth_token']) && $_SESSION['oauth_token'] !== NULL && isset($_SESSION['oauth_token_secret']) && $_SESSION['oauth_token_secret'] !== NULL) { // 認証完了 $user_id = $_SESSION['user_id']; $screen_name = $_SESSION['screen_name']; $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $reply = $cb->users_show(array('user_id'=>$user_id)); if ($user_id != $reply->id) { header('Location: ./logout.php'); return; } } else { header('Location: ./logout.php'); return; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css" /> <title>Twitterログインテスト</title> </head> <body> <h1>デモンストレーション</h1><br/> ようこそ<strong><?php echo $reply->name; ?>さん</strong> ログインに成功しました。<br/><br/> <a href="logout.php">ログアウトする</a><br/> </body> </html>
ファイル名:logout.php
<?php session_start(); session_regenerate_id(TRUE); session_destroy(); $_SESSION = NULL; unset($_GET['oauth_verifier']); header("Location: ./unlogin.php"); ?>
なお、このファイルをここに設置しました。http://garagekoh.xii.jp/feed/
注)Twitterのアカウントが必要です。
- 投稿タグ
- codebird.php, PHP, Twitter
最近のコメント