问题 我正在尝试让LightOpenID与Google Apps Enterprise帐户一起使用。 当我调用validate()时,我得到"找不到服务器!"。 我模拟了一个快速页面来测试LightOpenID的每个步骤,我已经走得更远了,现在总是得到"is_valid:false"。
到目前为止我做了什么在逐行处理 validate() 和 discover() 时,我注意到某些 openid->data[](想想"openid_*")值没有进入最终的参数数组(想想"openid.*"),所以在下面的例子中,我显式地编码了这些值。我不知道我是否总是得到is_valid:false,因为我错过了一个openid。一些值,或者如果因为 OpenID 说提供者只应该验证每个随机数一次或其他东西。
你如何帮助我 如果你已经走到了这一步,我可以使用两件事之一。 要么指出我的示例代码中的错误,要么给我一个你用来测试这种事情的过程。 我真的必须在每次测试验证/验证步骤时注销/重新登录吗? 是否有任何工具或流程可以加快这种修补速度?
示例代码 我用 example.com 替换了我的域。 如果您需要任何输出,请告诉我。谢谢,埃里克·
try {
$openid = new LightOpenID;
if(!$openid->mode) {
if(isset($_GET['login'])) {
//$openid->identity = 'https://www.google.com/accounts/o8/id';
$openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Google</button>
</form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
$tClaimedID = 'https://www.google.com/a/example.com/o8/ud?be=o8';
$openid->data['openid_claimed_id'] = $tClaimedID;
foreach (explode(',',$openid->data['openid_signed']) as $item) {
$value = $openid->data['openid_'.str_replace('.','_',$item)];
$params['openid.'.$item] = get_magic_quotes_gpc()?stripslashes($value):$value;
}
$params['openid.mode'] = 'check_authentication';
$params['openid.ns'] = $openid->data['openid_ns'];
$params['openid.signed'] = $openid->data['openid_signed'];
$params['openid.sig'] = $openid->data['openid_sig'];
$tBody2 = $openid->request($tClaimedID,'POST',$params);
echo "nn tBody2: ".$tBody2." nn";
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
LightOpenID正在您的服务器上查找/openid
以搜索XRDS文档。
在响应/openid
文档的任何内容中添加以下内容:
<?php
header('X-XRDS-Location: https://www.google.com/accounts/o8/site-xrds?hd=example.com');
?>
在您尝试登录后的原因在中,谷歌返回一个身份。必须发现此标识,才能查看它是否指向有效的 OpenID 提供程序(因此它不是欺骗他们)。由于 Gogole 返回您域中的身份,因此您必须添加谷歌有权发布它们的信息。信息必须在/openid
,因为标识的形式为:http://example.com/openid?[...]
。否则,LightOpenID会打开该网址,看不到任何指向任何内容的内容。服务器,并返回"未找到服务器!
遇到了同样的问题并:)解决它,您应该需要禁用安全模式:关闭,这对我有用:)