スポンサーサイト

-- --, --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ソーシャルブックマークする。
Yahoo!ブックマークに登録 はてなブックマークに追加 このエントリをlivedoorクリップに登録 BuzzurlにブックマークBuzzurlにブックマーク @niftyクリップに追加

PHPでOpenIDを使ったサンプルコード

11 12, 2009

PHPでOpenIDを使ったサンプルコード

ゲームサービスを作ったときに、OpenID認証を使ったのでその時のメモを残します。
↑のゲームで対応しているOpenIDサイトは、
・Google
・mixi
・yahoo! Japan
・livedoor
・はてな
・Flickr
です。

PHPでOpenIDを利用するときは、PHPのOpenIDライブラリを使うと便利です。
OpenIDで難しいのは仕組みを理解するところだと思うのですが、今回は仕組みを詳しく知らなくてもサンプルコードをまねしたら自分も出来た、を目標にしたいと思います。

仕組みに関しては、第2回:PHPで作ろうConsumerとかに載ってるので、興味があればどうぞ。

また、私のゲームサイトのOpenID認証はWinOfSql - PHP OpenID 認証。mixi でログイン。コードサンプル :【OpenID】を参考につくりました。
元ネタはここですので、一通り読んでおくことをお勧めします。

なお、今回はPHPプログラムの話のみとなりますのでご了承を。


試す


まずは、OpenIDがどのように動くのか試してみましょう。
このサイトにいってボタンを押してみてください。
すると、こんな画面が出てくると思います。

ログイン

どれかのボタンを押すと、そのサイトのOpenID認証画面がでててきます。
認証されると、「違うサイトに移動しますがいいですか?」といった画面が表示され、ボタンを押すと元のサイト(ここではゲームサイト)に戻ってきます。
Yahoo!Japanで認証したときは、↓のような画面が出てきます。
yahooOpenID.png


ライブラリをダウンロード


ここのPHP OpenID Libraryとこのページのサンプルファイル一式をダウンロードします。
解凍したら、webサーバにアップします。
最初のサイトからは「Auth」フォルダだけ必要です。
Authフォルダはサンプルコードフォルダの中に入れてアップロードします。


mixiでやってみる


各ファイルの役割やソースなどはサイトで説明されているので、ここでは流れを追ってみます。

アップしたWebページにアクセスしてみると、こんな画面が表示されると思います。
OpenID01.png
(何も表示されず、左上にイメージのリンク切れのアイコンがある)

index.php → OpenIDのセッションがない → logout_view.phpでHTML表示(←ここで指定されている画像が表示されていない)

なので、 logout_view.phpの14行目、画像表示のタグを消して文字にしてみます。

<A href="login.php?id=https%3A%2F%2Fmixi.jp"><IMG src="a_150.gif" border=0></A>

<A href="login.php?id=https%3A%2F%2Fmixi.jp">mixiOpenIDでログイン</A>

そして、このリンクをクリックするとmixiのOpenIDで認証されます。


ちゃんとmixiのニックネームが表示されているのが分かります。


そのほかのサービスでやってみる


各サービスのOpenID の インク先です。

Yahoo!Japan: login.php?id=http://yahoo.co.jp
google: login.php?id=https://www.google.com/accounts/o8/id
livedoor: login.php?id=http://livedoor.com
flickr: login.php?id=http://flickr.com
はてな: login.php?id=http://www.hatena.ne.jp/はてなID/

これらを先ほどのlogout_view.phpのmixiの下にリンクすれば、それぞれのサービスのOpenID認証画面に飛んでいきます。

OpenID05.png


認証情報をセッションに入れる


今回のサンプルだと、mixiのニックネームを表示するようになっています。
mixi以外のサービスを使った場合は、ニックネームはないので画面には何も表示されません。

各サービスから正しく認証された場合、サンプルファイルの
return_control.php
にフローが帰ってきます。

28行目に
$_SESSION['id'] = $response->getDisplayIdentifier();
というコードがあります。
ここで、ユーザのOpenIDを$_SESSION['id']というセッションに入れています。

また、mixiの場合は35行目で
if (@$sreg['nickname']) {
$_SESSION['nickname'] =
mb_convert_encoding( $sreg['nickname'], "SHIFT_JIS", "UTF-8" );
}
mixiニックネームを入れています。

どんな値がサービス側から帰ってきているかを調べるために、
最後のあたりに↓のコードをいれて、眺めてみるのもいいかもしれません。


echo ("<pre>");
var_dump ($response);
echo ("</pre>");
exit;



最後に


いかがでしたでしょうか?
案外簡単にPHPでOpenID認証を実装できたのではないかと思います。

あとは好きなところにリダイレクトさせてあげればよいですね!


ソーシャルブックマークする。
Yahoo!ブックマークに登録 はてなブックマークに追加 このエントリをlivedoorクリップに登録 BuzzurlにブックマークBuzzurlにブックマーク @niftyクリップに追加

0 CommentsPosted in PHPのサンプル
-0 Comments
Leave a comment
管理者にだけ表示を許可する
-0 Trackbacks
Top


プロフィール

スズキ ロイ

Author:スズキ ロイ
プライベート Web クリエーター。
海外のWebアプリ、ソーシャルアプリを中心に情報収集してます。

RSSリンクの表示
最新記事
全記事(数)表示
全タイトルを表示
人気エントリー
あわせて読みたい
あわせて読みたいブログパーツ
月別アーカイブ
最新コメント
最新トラックバック
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。