Есть ли лучший способ получить информацию об OpenID от провайдера?

Я новичок в логике 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, я уверен, что у меня возникнут проблемы с другими / меньшими провайдерами. Есть ли лучший и лучший способ добиться того же результата? Это кажется особенно ошибочным, если я попытаюсь получить другие необязательные поля ...

8
задан ROMANIA_engineer 20 June 2017 в 22:42
поделиться