Получение данных SREG с использованием Zend_Auth и OpenID
Я не могу понять, как получить значения расширения SREG при использовании Zend_Auth_Adapter_OpenId. Я слежу за этими страницами документации:
http://framework.zend.com/manual/en/zend.auth.introduction.html
http://framework.zend.com/manual/en/zend.openid.consumer.html
В документации по Zend_Auth говорится, что при использовании OpenID сделать второй вызов authenticate(), например так:
$auth_result = $auth->authenticate(new Zend_Auth_Adapter_OpenId());
И это работает, когда $auth_result заканчивается как Zend_Auth_Result::SUCCESS.
Однако в документации Zend_OpenId_Consumer, чтобы получить возвращенные данные SREG, сказано:
$sreg = new Zend_OpenId_Extension_Sreg(array('email'=>false,'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
$consumer->verify($_GET, $id, $sreg);
И это тоже работает, так как verify() возвращает true, а $sreg->getProperties() возвращает запрошенные мной поля SREG.
Проблема в том, что я не могу сделать обе эти вещи! Если я сначала сделаю этот вызов для authenticate(), то verify() вернет false. Если я сначала проверил (), то authenticate () возвращает Zend_Auth_Result::FAILURE. Глядя на код в Zend/Auth/Adapter/OpenId.php, становится очевидно, что authenticate () вызывает внутреннюю функцию verify(), что имеет смысл. Однако значения SREG, которые заполняются этим внутренним вызовом, не раскрываются никакими средствами, которые я вижу. Что мне не хватает?
(Набирая это и экспериментируя, я обнаружил, что могу просто извлечь значения SREG из $_GET, например, $_GET['openid_sreg_email'], но это не похоже на предполагаемый шаблон. Это решает мою проблему, но Я все еще хотел бы знать, есть ли более официальное решение.)
1 ответ
Официально Zend не поддерживает OpenID 2.0 и Google OpenID провайдера. Но есть патч, доступный из трекера проблем. Вот ссылка на этот патч. Вы должны заменить свой Consumer.php с этого сайта. После применения этого патча OpenID должен работать с Google и другими крупными провайдерами, такими как Yahoo!
И если говорить об OP, получающем SREG из OpenID, то для параметра GET такого стандарта нет. Это уже обсуждалось однажды в Stackru здесь и в Meta Stackru здесь.
Обмен атрибутами - это еще одна вещь, которая необходима в Zend Framework.
Связанный вопрос здесь.