2011-09-09 5 views
1

を使用してOpenIDプロバイダからの電子メールアドレスを取得し、私は次のメッセージが出ます:私はStackOverflowのはグーグルを使用してサインインすると受け付けを開始OpenIDのライブラリ

Stackoverflow.comは、Googleアカウントの例@ gmailのからいくつかの情報を求めているが。メールアドレス•COM

[email protected]

しかし、私はOpenIDを使ってログイン自分のサイト上で私は、電子メールアドレスを求めることはできません。代わりに、私はこのメッセージが表示されます。

あなたは、私もそれが困難な私がする必要がどのようなステップで理解するために見つけていますGoogleアカウント[email protected]

でexample.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; 
     } 
    } 
} 

:ここで私はステップはに組み込まれるべきだと思うコードがありますそれを理解する。どんな助けでも大歓迎です!

答えて

1

あなたは受け付けを開始ライブラリを使用したい場合、あなたはこのような要求に拡張子を追加することができますZend Simple Registration Extension

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

関連する問題