OpenID テストキット完全版 : ページ( 3 )

  OpenID を使用したログイン処理



login.php
<?
session_start();
// エラーメッセージを表示
ini_set( 'display_errors', "1" );

// エラーメッセージ対象のコード
require_once( 'login_control.php' );
?>



login_control.php
<?php
require_once "common.php";

// *********************************************************
// 基本オブジェクト作成
// *********************************************************
$store = new Auth_OpenID_FileStore($store_path);
log_file(print_r($store,true));
$consumer = new Auth_OpenID_Consumer($store);
log_file(print_r($consumer,true));

// *********************************************************
// 対象
// *********************************************************
if ( $_GET['id'] != "" ) {
	$openid = $_GET['id'];
	log_file(print_r($openid,true));

	$error_message = "";
	$auth_request = $consumer->begin($openid);
	if (!$auth_request) {
		$error_message = "OpenID が正しくありません";
	}

	if ( $error_message == "" )	 {
		// nickname 等が必要無い場合はここを実行する必要はない
		$sreg_request = 
			Auth_OpenID_SRegRequest::build(
				// Required
				array('nickname'),
				// Optional
				array('fullname', 'email')
			);
		if ($sreg_request) {
			$auth_request->addExtension($sreg_request);
		}
		log_file(print_r($auth_request,true));

		// Google の email 取得 ( friendly は Yahoo で、mixi でも使えました )
		$ax = new Auth_OpenID_AX_FetchRequest;

		$attribute = array();
		$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/contact/email', 1, true,'email');
		$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/last', 1, true,'lastname');
		$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/first', 1, true,'fastname');
		$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/friendly', 1, true,'friendly');


		foreach($attribute as $attr){
			$ax->add($attr);
		}
		$auth_request->addExtension($ax);

	}
	
	if ( $error_message == "" )	 {
		if ($auth_request->shouldSendRedirect()) {
			$redirect_url = 
				$auth_request->redirectURL( $trust_root, $return_to );

				if (Auth_OpenID::isFailure($redirect_url)) {
					$error_message =
						"サーバーにリダイレクトできません:"
						. $redirect_url->message;
				}
				else {
					log_file(print_r($redirect_url,true));
					header("Location: ".$redirect_url);
				}
		}
		else {
			$form_id = 'openid_message';
			$form_html = 
				$auth_request->htmlMarkup(
					$trust_root, $return_to,
					false,
					array('id' => $form_id )
				);
		
			if (Auth_OpenID::isFailure($form_html)) {
				$error_message =
					"サーバーにリダイレクトできません(HTML):"
					. $form_html->message;
			}
			else {
				log_file(print_r($form_html,true));
				print $form_html;
			}
		
		}
	}
}

// リダイレクトされなかった場合の表示
require_once "login_view_message.php";

?>



login_view_message.pjp
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>ログイン</TITLE>
<STYLE type="text/css">
* {
	font-size: 12px;
}
</STYLE>
</HEAD>
<BODY>

<?= $error_message ?>

</BODY>
</HTML>




  OpenID 呼び出し時に使用された HTML コード



<html><head><title>OpenId transaction in progress</title></head><body onload='document.forms[0].submit();'><form accept-charset="UTF-8" enctype="application/x-www-form-urlencoded" id="openid_message" action="https://mixi.jp/openid_server.pl" method="post">
<input type="hidden" name="openid.ns" value="http://specs.openid.net/auth/2.0" />
<input type="hidden" name="openid.ns.sreg" value="http://openid.net/extensions/sreg/1.1" />
<input type="hidden" name="openid.ns.ax" value="http://openid.net/srv/ax/1.0" />
<input type="hidden" name="openid.sreg.required" value="nickname" />
<input type="hidden" name="openid.sreg.optional" value="fullname,email" />
<input type="hidden" name="openid.ax.mode" value="fetch_request" />
<input type="hidden" name="openid.ax.type.email" value="http://axschema.org/contact/email" />
<input type="hidden" name="openid.ax.type.lastname" value="http://axschema.org/namePerson/last" />
<input type="hidden" name="openid.ax.type.fastname" value="http://axschema.org/namePerson/first" />
<input type="hidden" name="openid.ax.type.friendly" value="http://axschema.org/namePerson/friendly" />
<input type="hidden" name="openid.ax.required" value="email,lastname,fastname,friendly" />
<input type="hidden" name="openid.realm" value="http://light:80/test2/openid_sample/" />
<input type="hidden" name="openid.mode" value="checkid_setup" />
<input type="hidden" name="openid.return_to" value="http://light:80/test2/openid_sample/return.php?janrain_nonce=2010-11-15T07%3A01%3A45ZCJXd4m" />
<input type="hidden" name="openid.identity" value="http://specs.openid.net/auth/2.0/identifier_select" />
<input type="hidden" name="openid.claimed_id" value="http://specs.openid.net/auth/2.0/identifier_select" />
<input type="hidden" name="openid.assoc_handle" value="1289709421:ifTkURnRG08dG8buKOfG:0a5e20b23e" />
<input type="submit" value="Continue" />
</form>
<script>var elements = document.forms[0].elements;for (var i = 0; i < elements.length; i++) {  elements[i].style.display = "none";}</script></body></html>












  infoboard   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ