如何让LightOpenId以checkid_immediate模式获取用户的电子邮件?

时间:2012-01-14 23:20:38

标签: php openid lightopenid

处所:

  • 我使用php LightOpenId通过他的谷歌帐户验证用户。
  • 我正在使用网站提供的标准样本(example.php)。没有什么花哨。
  • 添加一行或两行以更改行为。
  • 我的所有客户都是Google员工。

Requirement1

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

我遇到了两个问题:

  1. 我无法收到电子邮件,lang ...属性。

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

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

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

  2. subdomain.mydomain2.com代码的行为与www.mydomain1.com不同 www.mydomain1.comcheckid_immediate一起运作正常。 具有相同代码的subdomain.mydomain2.com会转换为checkid_setup来电。

    如何使checkid_immediate模式的子域名与www不同?

    问题#2自行解决了!清除缓存并重新启动Google Chrome后

  3. 提前致谢。

1 个答案:

答案 0 :(得分: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返回的标识网址。