2010年11月15日


PHP : OpenID テストキット 完全版


PHP 5.3.x で出るエラーに対処
Deprecated: Assigning the return value of new by reference is deprecated in
という警告が出るのは、PHP: PHP 5.3.x で推奨されない機能 - Manual のせいですが、サンプル
ではほとんど使っていなかったので =& を = に変更しました。
この記述はライブラリのオリジナルサンプルにあったもので、現在でもあります。
意味は、new での戻り値は元々参照扱いなので =& を使ってはいけないというよ
うな事だと思いますが、過去のリソースを使う場合そんな事は言ってられないの
で、本来なら php.ini に、
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
と書いて対処します
ログイン後、Google ではメールアドレスを取得
Google のドキュメント(英文)にある仕様Attribute exchange extension
を使って取得しています。( ライブラリでは、Auth/OpenID/AX.php を使います )
ログイン後、Yahoo では表示名を取得
Yahoo は、プロフィールで設定された公開情報を取得できますが、個人の設定に
かなり依存するので実用に使えるかどうかはあまり保証されないと思います。
( Yahoo! JAPANが対応しているOpenID拡張仕様 )
http://axschema.org/namePerson/friendly を使う事によって、mixi でもニック
ネームが取得できるようになったのですが、mixi が対応している事を表記した
資料は以下です。
仕様 << mixi Developer Center (ミクシィ デベロッパーセンター)
※ mixi は以前より Attribute exchange extension 無しでニックネームを取得しています ( openid.sreg.nickname ) 一覧 : Schema for OpenID Attribute Exchange | Attribute Types WEB 上でのログインテスト


Google でログイン

Yahoo でログイン
index.php
<?
session_start();
header( "Content-Type: text/html; Charset=shift_jis" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

if ( $_GET['logout'] != "" ) {
	$_SESSION['id'] = "";
	$_SESSION['nickname'] = "";
	$_SESSION['email'] = "";
	$_SESSION['dispname'] = "";
}

if ( $_SESSION['id'] == "" ) {
	// エラーメッセージを表示
	ini_set( 'display_errors', "1" );
	
	// ログインされていないので、ログインページを表示
	require_once( 'login_view.php' );


	exit();
}

?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>ようこそ</TITLE>
<STYLE type="text/css">
* {
	font-size: 30px;
}
</STYLE>
<SCRIPT language="javascript" type="text/javascript">

</SCRIPT>
</HEAD>
<BODY>

<?
	if ( $_SESSION['nickname'] != '' ) {
		print "ようこそ {$_SESSION['nickname']} さん<br>";
	}
	if ( $_SESSION['email'] != '' ) {
		print "email : {$_SESSION['email']}<br>";
	}
	if ( $_SESSION['dispname'] != '' ) {
		print "表示名 : {$_SESSION['dispname']}<br>";
	}

?>
<br><br>
ID: <?= $_SESSION['id'] ?>

<FORM>
<INPUT type=submit name=logout value="ログアウト">
</FORM>
</BODY>
</HTML>

必要なもの :OpenID テストキット完全版

設置手順 1)

http://www.janrain.com/openid-enabled
上記の URL からライブラリをダウンロードして、openid2/Auth/OpenID.php と
なるように配置します。

[openid_sample]
    common.php
    その他のファイル
[openid2]
    [Auth]
        [OpenID]
        [Yadis]
        OpenID.php

設置手順 2)

Auth/Yadis/ParanoidHTTPFetcher.php を以下のように変更します
( 2箇所ある、curl_exec($c); の直前に以下を記述 )

if ($this->isHTTPS($url)) {
    curl_setopt($c, CURLOPT_CAINFO, $GLOBALS['openid_pem']);
}
これは、設置手順 4) でダウンロードしたファイルの実装方法ですが、
common.php の先頭で定義している変数を使っています。
そもそも、これをする意味は、mixi の デベロッパーセンター
で書かれている、SSL の接続に失敗する事への対処です。PHP では
curl を使って 通信するのですが、その際に証明書の最新が必要だと
いう事が、mixi で書かれています。その対処方法が、cacert.pem の
ダウンロードと実装なのです。
設置手順 3) OpenID.php のログ処理を以下のように書き換えます static function log($format_string) { $args = func_get_args(); $message = call_user_func_array('sprintf', $args); // error_log($message); if ( $GLOBALS['logfile'] != "" ) { error_log("$message\n", 3, $GLOBALS['logfile']); } }
error_log は、環境によっては単に print されてしまいますし、ログに
出力するにしてもデバッグに使え無いと意味無いので common.php の先頭
で定義した変数の中にファイル名が入っている時だけ出力するようにして
います。

※ OpenID のライブラリでは、エラーでなくても、または実際には問題無く
※ ても出力されるメッセージがあります。
設置手順 4) http://curl.haxx.se/docs/caextract.html から、cacert.pem をダウンロード して、openid_sample フォルダ内に置きます。 設置手順 5) (windowsのみ) windows では、php.ini の extension=php_curl.dll と extension=php_openssl.dll を有効にします ソースコード 共通部品 : common.php 開始コード( index.php ) ログインされていない時に表示される画面 OpenID を使用したログイン処理 OpenID 呼び出し時に使用された HTML コード 戻ってきた情報を受け取る 関連するページ PHP OpenID 認証 実行サンプル
posted by at 2010-11-15 06:31 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Loading
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。