Запрашивание адреса электронной почты у поставщика OpenID в PHP
Вопрос
Как самый простой способ запросить адрес электронной почты у провайдера OpenID?
Есть ли хорошая библиотека PHP, которая упрощает эту проблему?
Я знаю, что поставщики реализуют вещи по -другому. Я слышал, что вам нужно выполнить как простую регистрацию, так и обмен атрибутами. Я бы особенно хотел убедиться, что это работало с крупнейшими поставщиками, такими как Myopenid и Google.
Связанный, но неадекватный, вопросы:
Решение
У Джанрейна есть Открытая библиотека PHP ID, одна из первых библиотек (я полагаю) от компании, ориентированного на OpenID. Вы упомянули о работе с Myopenid, который сайт Janrain.
Тем не менее, лично я сейчас использую библиотеку Zend (я играл с библиотекой Janrain несколько лет назад), просто потому, что я обычно разрабатываю, используя Zend Framework.
Вот несколько примеров кода, если поставщик использует OpenID простое расширение регистрации.
Этот Раздел ссылки Zend Руководство показывает, как запросить пользовательскую информацию с помощью запроса аутентификации. Вот их пример код, отредактированный для ваших нужд:
//require e-mail, get nickname and fullname if available
$sreg = new Zend_OpenId_Extension_Sreg(array(
'nickname'=>false,
'email'=>true,
'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
if (!$consumer->login($openid, $returnUrl, null, $sreg)) {
die("OpenID login failed.");
}
Сделать то же самое с библиотекой Janrain аналогично, вот какой -то код, взятый из файла try_auth.php в пакете библиотеки (я отредактировал его, чтобы показать основные функции, которые вы ищете):
$auth_request = $consumer->begin($openid);
$sreg_request = Auth_OpenID_SRegRequest::build(
// Required
array('email'),
// Optional
array('fullname', 'nickname'));
$auth_request->addExtension($sreg_request);
За Обмен атрибутами Проверьте Janrain AUTH_OPENID_AX классы, в библиотеке Zend есть Запрос на функции поддержки AX.
Другие советы
Я бы посмотрел на Zend Framework's Openid Library, zend_openid. Анкет Вы должны быть в состоянии использовать его без всей структуры.