我是OpenID逻辑的新手。我正在使用CakeBaker的CakePHP的OpenID组件,以及JanRain的PHP OpenID库。
这一切都运行得很好,但我找不到一种详尽的方法来检索用户信息,具体取决于提供者和方法(sreg与ax)。所以这就是我提出的:
if ($axResponse) {
if (is_array($a = $axResponse->get('http://axschema.org/contact/email'))) {
$user_record['email'] = $a[0];
if (is_array($b = $axResponse->get('http://axschema.org/namePerson'))) {
$user_record['nickname'] = $b[0];
}
} else if (is_array($a = $axResponse->get('http://schema.openid.net/contact/email'))) {
$user_record['email'] = $a[0];
if (is_array($b = $axResponse->get('http://schema.openid.net/namePerson'))) {
$user_record['nickname'] = $b[0];
}
}
} else if ($sreg) {
if (isset($sreg['email'])) {
$user_record['email'] = $sreg['email'];
}
if (isset($sreg['nickname'])) {
$user_record['nickname'] = $sreg['nickname'];
}
}
虽然我使用Google,Yahoo!成功测试了它和AOL的OpenID,我相信我会遇到其他/较小的提供商的问题。是否有更好,更好的方法来实现相同的结果?如果我尝试获取其他可选字段,这似乎特别有缺陷......
答案 0 :(得分:2)
请记住,OpenID是用户身份验证的标准,而不是数据访问授权。当然,您可以使用OpenID获取某些用户信息,但这不是协议的主要目的。 OAuth是授权的标准,如果您需要获取用户数据,则可能需要从此开始。
答案 1 :(得分:0)
我很抱歉......我对“CakePHP的OpenID组件”了解不多,但我使用的是 lightopenid ,它也是开源的..
检查一下: http://code.google.com/p/lightopenid/updates/list
我已经多次使用过了......这很好..我希望这有帮助...