Я новичок в логике OpenID. Я использую компонент OpenID для CakePHP от Cakebaker с библиотекой PHP OpenID от JanRain.
Все работает достаточно хорошо, но я не смог найти исчерпывающий способ получения информации о пользователе в зависимости от поставщика и метода (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! и OpenID AOL, я уверен, что у меня возникнут проблемы с другими / меньшими провайдерами. Есть ли лучший и лучший способ добиться того же результата? Это кажется особенно ошибочным, если я попытаюсь получить другие необязательные поля ...