当我使用谷歌登录到StackOverflow时,我会得到以下信息:
Stackoverflow.com正在询问你的Google帐户example@gmail.com的一些信息 ·电子邮件地址: example@gmail.com
然而,在我自己的网站上,当我登录到OpenID时,我无法询问电子邮件地址。相反,我得到了这样的信息:
您正在使用Google帐户example.com登录example@gmail.com。
我也发现很难理解我需要在哪一步要求电子邮件地址。下面是我认为应该将这一步嵌入到其中的代码:
/**
* Authenticates the given OpenId identity.
* Defined by Zend_Auth_Adapter_Interface.
*
* @throws Zend_Auth_Adapter_Exception If answering the authentication query is impossible
* @return Zend_Auth_Result
*/
public function authenticate() {
$id = $this->_id;
$consumer = new Auth_OpenID_Consumer($this->_storage);
if (!empty($id)) {
$authRequest = $consumer->begin($id);
if (is_null($authRequest)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", 'Unknown error')
);
}
if (Auth_OpenID::isFailure($authRequest)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", "Could not redirect to server: " . $authRequest->message)
);
}
$redirectUrl = $authRequest->redirectUrl($this->_root, $this->_returnTo);
if (Auth_OpenID::isFailure($redirectUrl)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", $redirectUrl->message)
);
}
Zend_OpenId::redirect($redirectUrl);
} else {
$response = $consumer->complete(Zend_OpenId::selfUrl());
switch($response->status) {
case Auth_OpenID_CANCEL:
case Auth_OpenID_FAILURE:
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
null,
array("Authentication failed. " . @$response->message)
);
break;
case Auth_OpenID_SUCCESS:
return $this->_constructSuccessfulResult($response);
break;
}
}
}这似乎很明显.但我很难在谷歌上搜索并梳理代码来找出答案。任何帮助都将不胜感激!
发布于 2011-09-09 15:54:19
您可以使用Zend简单注册分机请求一个电子邮件地址
$sreg = new Zend_OpenId_Extension_Sreg(array(
'nickname'=>true,
'email'=>false,
'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
if (!$consumer->login($_POST['openid_identifier'],
'example-6_3.php',
null,
$sreg)) {
die("OpenID login failed.");
}如果您想使用珍妮恩库,可以向请求添加如下扩展:
$sreg_request = Auth_OpenID_SRegRequest::build(
// Required
array('nickname'),
// Optional
array('email'));
if ($sreg_request) {
$authRequest->addExtension($sreg_request);
}看看消费者示例:https://github.com/openid/php-openid/blob/master/examples/consumer/
https://stackoverflow.com/questions/7362880
复制相似问题