|
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>
|
|