我对OpenID的逻辑还不太熟悉。我正在使用Cakebaker提供的CakePHP OpenID组件以及JanRain提供的PHP OpenID库。
目前一切都运行得很好,但是我无法找到一种详尽的方法来根据提供商和方法(sreg vs. 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进行了测试,但我相信如果我尝试使用其他/较小的提供商,我可能会遇到麻烦。有没有更好、更好的方法来实现相同的结果?如果我尝试获取其他可选字段,这似乎特别有缺陷...