この記事では、Twitterの認証プロセスを参考に実装されたSina Weibo OAuthの認証と保存の主要なプロセスを詳しく説明します
OAuthに関する記事はインターネット上に多数ありますが、検証プロセスや検証後のデータの保存など、sina本体も含めた詳細な紹介がなかったので、Twitterの認証プロセスを参考に詳細なコメントコードをいくつか書きました。
始める前に、まずユーザー情報を保存するデータベースを作成します。これは基本的な MySQL の例です。
1 2 3 4 5 6 7 8 9
|
テーブル `oauth_users` を作成します ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `oauth_provider` VARCHAR(10), `oauth_uid` テキスト、 `oauth_token` テキスト、 `oauth_secret` テキスト、 「ユーザー名」テキスト、 主キー (`id`) ) ENGINE=MyISAM デフォルト CHARSET=utf8;
|
次に、次のタスクを順番に完了する必要があります:
SinaAPI への認証アプリケーションを開始して登録/ログインします。ユーザーがすでにアカウントを持っている場合は、関連データをセッションに保存します
OAuth ベースの認証プロセスは、URL を生成することから始まります。ユーザーは認証を要求するためにこの URL にリダイレクトされ、認証に合格すると、ユーザーはアプリケーション サーバーにリダイレクトされ、2 つの認証されたパラメータが URL を通じて返されます。
index.phpを作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
session_start(); //if( isset($_SESSION['last_key']) ) header("場所: weibolist.php"); include_once( 'config.php' ); include_once( 'weibooauth.php' ); //sinaOAuthオブジェクトインスタンスを作成します $sinaOAuth = 新しいWeiboOAuth( WB_AKEY , WB_SKEY ); $keys = $sinaOAuth->getRequestToken(); // 認証トークンをリクエストします。パラメータはリダイレクト先の URL です $aurl = $sinaOAuth->getAuthorizeURL( $keys['oauth_token'] ,false , 'http://t.yourtion.com/sina/callback.php'); //セッションに保存 $_SESSION['keys'] = $keys; ?> Oauth を使用してログイン
|
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
session_start(); include_once ('config.php'); include_once ('weibooauth.php'); if (!empty($_GET['oauth_verifier']) && !empty($_SESSION['keys']['oauth_token']) && !empty($_SESSION['keys']['oauth_token'])) { // SinaOAuth オブジェクト インスタンス、新しく追加された 2 つのパラメータに注意してください $sinaOAuth = 新しい WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']); // アクセストークンを取得します $access_token = $sinaOAuth->getAccessToken($_REQUEST['oauth_verifier']); // 取得したアクセストークンをセッションに保存します $_SESSION['access_token'] = $access_token; // ユーザー情報を取得します $user_info = $sinaOAuth->get('account/verify_credentials'); //ユーザー情報を印刷します mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PSSWORD); mysql_select_db(DATABASE_DB_NAME); //config.php のデータベース接続に置き換えます if (isset($user_info->error) または empty($user_info['id'])) { // 何か問題があるので、最初に戻ってください header('場所:index.php'); }その他 { // ID でユーザーを見つけてみましょう $sql = "SELECT * FROM oauth_users WHERE oauth_provider='sina' AND oauth_uid= .$user_info['id']; $query = mysql_query($sql); $result = mysql_fetch_array($query); // そうでない場合は、データベースに追加しましょう if (空($result)) { $sql = "oauth_users (oauth_provider、oauth_uid、ユーザー名、oauth_token、oauth_secret) VALUES ('sina', '" . ) に挿入します。$user_info['id'] . "', '" . $user_info['screen_name'] . $access_token['oauth_token'] . "', '" . $access_token['oauth_token_secret'] "')"; $query = mysql_query($sql); $query = mysql_query("SELECT * FROM oauth_users WHERE id = ".mysql_insert_id()); $result = mysql_fetch_array($query); }その他 { //トークンを更新します $query = mysql_query("UPDATE oauth_users SET oauth_token = '" . $access_token['oauth_token'] . "', oauth_secret = '" . $access_token['oauth_token_secret'] . "' WHERE oauth_provider = 'sina' AND oauth_uid = " . $user_info['id']); } $_SESSION['id']=$result['id']; $_SESSION['ユーザー名']=$result['ユーザー名']; $_SESSION['oauth_uid']=$result['oauth_uid']; $_SESSION['oauth_provider']=$result['oauth_provider']; $_SESSION['oauth_token']=$result['oauth_token']; $_SESSION['oauth_secret']=$result['oauth_secret']; header('場所: update.php'); } }その他 { //データが不完全です。前のステップに進んでください header('場所:index.php'); }
?> |
$user_info->id を通じてユーザー ID を取得でき、$user_info->screen_name を通じてユーザー名を取得できます。他の情報も同様の方法で取得できます。
oauth_verifier によって返されたパラメーターは再利用できないことを指摘することが重要です。上記のコードがユーザー情報を正しく出力した場合、ページを更新してみると、oauth_verifier が原因でページがエラー メッセージをスローすることがわかります。すでに一度使用しています。再度使用するには、index.php ページに移動して認証リクエストを再度開始する必要があります。
ユーザー登録
ユーザー情報を取得したら、ユーザー情報を独自のデータベースに登録する必要があります。もちろん、ユーザーがローカル データベースに登録されていないことが前提です。
上記のコード内のデータベースリンク情報は独自のものに変更する必要があります。ユーザーがデータベースにすでに存在する場合は、ユーザーのトークン フィールドを更新する必要があります。これは、Twitter が新しいトークンを生成し、データベース内のトークンの有効期限が切れたことを意味するためです。ユーザーが存在しない場合は、新しいレコードを追加し、関連データをセッションに保存し、最後に update.php ページにリダイレクトする必要があります。
update.php コードは次のとおりです:
上記のコード内の SQL は検証されていないため、実際に使用する場合は変更が必要になる可能性があることに注意してください。データベースに接続する前に、ユーザーがログインしているかどうかを確認する必要があります。ユーザー名を使用すると、パーソナライズされたウェルカム メッセージを表示できます:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
include_once ('config.php'); include_once ('weibooauth.php'); session_start(); if(!empty($_SESSION['ユーザー名'])){ // ユーザーはログインしています、リダイレクトします header('index.php'); } ?>
こんにちは=$_SESSION['username'] ?>ボディ> |
これは OAuth 認証と保存の主なプロセスです。お役に立てば幸いです。 コードのダウンロード: SinaOauth
この記事で説明した内容は以上です。皆さんに気に入っていただければ幸いです。