0

敷地内:

  • 私はphp LightOpenIdを使用して、Googleアカウントを介してユーザーを認証しています。
  • Web サイトから提供されている標準サンプル (example.php) を使用しています。派手なものはありません。
  • 動作を変更するために 1 ~ 2 行追加します。
  • 私のクライアントはすべて Google 社員です。

要件1

クライアントに 2 回ログを記録させたくないので (SSO の動作)、 を $openid->mode=checkid_immediate呼び出す前 に を追加しheader...$openid->authUrl()ます。

2 つの問題が発生します。

  1. email、lang ... 属性を取得できません。

    実際、checkid_immediate モードを使用してauthUrl() 、ユーザーが期待どおりに正しく接続されるようにしました。

    しかし$openid->required、コードを変更し、リクエストの前に属性を収集するためにを追加すると、呼び出しがモード呼び出しauthUrl()に強制的に変換されます。checkid_setup

    1 回の呼び出しで、checkid_immediate モードを維持して属性を取得するにはどうすればよいですか?

  2. subdomain.mydomain2.comwww.mydomain1.com コードはのようにwww.mydomain1.com動作しませんcheckid_immediate。同じコードのsubdomain.mydomain2.comは呼び出しに変換されcheckid_setupます。

    checkid_immediatewww 以外のサブドメインでモードを維持するにはどうすればよいですか?

    問題#2はそれ自体で解決しました!!! キャッシュをクリアしてGoogle Chromeを再起動した後

前もって感謝します。

4

1 に答える 1

1

0.5 の時点で、authUrl メソッドには、すぐにチェックするオプションの bool パラメーターがあります。試す:

if (!$openid->mode && !empty($storedIdentity)) {
  $openid->identity = $storedIdentity;
  $openid->required = array('contact/email', 'pref/language');
  header('Location: ' . $openid->authUrl(true));
}

*質問の要求された属性を含めるようにコード例を編集しました。これは、$storedIdentity が以前に checkid_setup から返された ID URL であると想定しています。

于 2012-02-02T23:40:10.760 に答える