0

LightOpenIDを使用して OpenID を PHP Web アプリに統合しました。

OpenID を使用して (たとえば、Google 経由で) ログインしようとすると、名前やメール アドレスなどの個人情報を入力する必要があります (実際に入力します)。「Google でログイン」ボタンをクリックすると、基本的に次のコードが実行されます。

$openid = new LightOpenID($app['request']->getHttpHost());
$openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language');
$openid->identity = 'https://www.google.com/accounts/o8/id';
return $app->redirect($openid->authUrl(), 303);

これにより、ユーザーは Google にリダイレクトされ、次のプロンプトが表示されます。

そして、それらを私のサイトに返します。

ユーザーがログインしようとするたびに (登録後であっても)、Google がそのプロンプトを表示することを除いては、これで問題ありません。私は彼らの名前などを「要求」したので、これを行っていると思います。しかし、Google が既に私のアプリに許可を与えているのに、なぜ Google は彼らに同意を強要し続けるのでしょうか? また、OpenID 識別子を取得するまでアカウントを持っているかどうかを確認できない場合、これらのフィールドを必須としてマークしないようにするにはどうすればよいでしょうか?

4

2 に答える 2

1

はい、あなたが情報を要求したので、Google が表示しているのは正しいです。これは、Google が OpenID ワークフローをセットアップする方法であり、変更することはできません。

一部の OpenID プロバイダー (myopenid や私が作成したものなど) には、このプロンプトが表示されないようにする「remember me」オプションがあります。

于 2013-12-18T05:14:06.707 に答える
1

$openid->realm を試す

$openid = new LightOpenID($app['request']->getHttpHost());
$openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language');
$openid->realm = 'http://your.site.web/';
$openid->identity = 'https://www.google.com/accounts/o8/id';
return $app->redirect($openid->authUrl(), 303);

編集:しかし、「namePerson/first」、「namePerson/last」で機能するかどうかはわかりません...

于 2013-11-11T12:51:49.230 に答える