1

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 値を取得できることがわかりましたが、それは意図したパターンではないようです。これで問題は解決しますが、より正式な解決策があるかどうかを知りたいです。)

4

1 に答える 1

0

Zend は公式には OpenID 2.0 と Google OpenID プロバイダーをサポートしていません。しかし、Issue tracker から入手できるパッチがあります。これがそのパッチへのリンクです。そのサイトの Consumer.php を置き換える必要があります。このパッチを適用すると、OpenID は Google や Yahoo! などの他の主要なプロバイダーで動作するはずです。

OPについて言えば、OpenIDの結果からSREGを取得しますが、GETパラメーターに使用できる標準はありません。これは、StackOverflow hereおよび Meta StackOverflow hereですでに一度議論されています。

属性交換は、Zend Framework で必要なもう 1 つの機能です。

関連する質問はこちら.

于 2011-12-19T17:44:47.017 に答える