0

前提:

  • 我正在使用 php LightOpenId 通过他的谷歌帐户对用户进行身份验证。
  • 我正在使用网站提供的标准示例(example.php)。没有什么花哨。
  • 添加一两行来改变行为。
  • 我所有的客户都是 Google 员工。

要求1

我不希望我的客户记录两次(SSO 行为),所以我 $openid->mode=checkid_immediate在调用之前 添加了header...$openid->authUrl().

我遇到2个问题:

  1. 我无法获得电子邮件、语言...属性。

    事实上,使用 checkid_immediate 模式并按照authUrl() 我的预期正确连接我的用户。

    但是在请求之前修改代码并添加$openid->required以收集属性会authUrl()强制我的调用转换为checkid_setup模式调用。

    如何在一次通话中保持 checkid_immediate 模式并获取我的属性?

  2. subdomain.mydomain2.comwww.mydomain1.com 代码的行为不像www.mydomain1.com. checkid_immediate具有subdomain.mydomain2.com相同代码的被转换为checkid_setup调用。

    如何checkid_immediate使用不同于 www 的子域保持模式?

    问题 #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 返回的身份 url。

于 2012-02-02T23:40:10.760 回答