Zend_Auth_Adapter_OpenId を使用しているときに、SREG 拡張機能の値を取得する方法がわかりません。私は次のドキュメント ページをフォローしています:
http://framework.zend.com/manual/en/zend.auth.introduction.html
http://framework.zend.com/manual/en/zend.openid.consumer.html
Zend_Auth のドキュメントでは、OpenID を使用して authenticate() の 2 回目の呼び出しを行う場合、次のように説明しています。
$auth_result = $auth->authenticate(new Zend_Auth_Adapter_OpenId());
これは機能し、$auth_result は Zend_Auth_Result::SUCCESS として終了します。
ただし、Zend_OpenId_Consumer のドキュメントでは、返された SREG データを取得するために、次のように記述されています。
$sreg = new Zend_OpenId_Extension_Sreg(array('email'=>false,'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
$consumer->verify($_GET, $id, $sreg);
そして、verify() が true を返し、$sreg->getProperties() が要求した SREG フィールドを返すため、これも機能します。
問題は、私がこれらの両方を行うことができないということです! 最初に authenticate() を呼び出すと、verify() は false を返します。最初に verify() すると、authenticate() は Zend_Auth_Result::FAILURE を返します。Zend/Auth/Adapter/OpenId.php のコードを見ると、authenticate() が内部で verify() を呼び出していることがわかります。これは理にかなっています。ただし、この内部呼び出しによって設定された SREG 値は、私が見ることができる方法では公開されません。私は何が欠けていますか?
(これを入力して実験しているときに、$_GET['openid_sreg_email'] などのように $_GET から SREG 値を取得できることがわかりましたが、それは意図したパターンではないようです。これで問題は解決しますが、より正式な解決策があるかどうかを知りたいです。)