Получить атрибуты OpenID AX из Google / Yahoo в Rails
Я использую плагин rails http://github.com/rails/open_id_authentication/ в моем приложении. Это работает для MyOpenID, однако при аутентификации в Google я не могу получить адрес электронной почты как часть обязательных атрибутов.
Насколько я понимаю, Google игнорирует запросы атрибутов sreg и слушает только схему AX для адреса электронной почты.
Вот мой код:
def open_id_authentication(openid_url)
#google only responds to AX for email, so we must provide that also
authenticate_with_open_id(openid_url, :required => [:nickname, :email, 'http://axschema.org/contact/email']) do |result, identity_url, registration|
if result.successful?
@user = User.find_or_initialize_by_identity_url(identity_url)
if @user.new_record?
unless registration['email'] || registration['http://axschema.org/contact/email']
failed_login "Your OpenID provider didn't send us an email address."
return
end
#some providers (like Google) won't send a nick name. We'll use email instead for those
nick = registration['nickname']
nick |= registration['email']
nick |= registration['http://axschema.org/contact/email']
email = registration['email'];
email |= registration['http://axschema.org/contact/email']
@user.login = nick
@user.email = email
@user.save(false)
end
self.current_user = @user
successful_login
else
failed_login result.message
end
end
Насколько я понимаю, я отправляю адрес электронной почты (как sreg, так и AX) по мере необходимости, и я должен иметь возможность вытащить их из registration
экземпляр, который передается вместе с ответом.
Когда я вхожу в Google, адрес электронной почты возвращается как "т".
Я справляюсь с этим неправильно? Как я могу получить адрес электронной почты пользователя от Google? Должен ли я прыгать через другие обручи, чтобы поддержать Yahoo?
4 ответа
Я сам решил эту проблему. Было нелегко найти официальные документы, на которых поддерживаются URL-адреса схемы AX.
Вот что я нашел:
Google будет отвечать только на адрес электронной почты, используя схему AX: http://schema.openid.net/contact/email
Yahoo ответит на псевдоним и электронную почту, используя следующие схемы AX:
http://axschema.org/namePerson/friendly
http://axschema.org/contact/email
Поэтому мне нужно запросить в основном все известные URL-адреса схемы AX для адреса электронной почты и надеяться, что поставщик отправит их. / пожимание плечами
Как уже упоминалось в другом постере, Google теперь отвечает на AX-схему для электронной почты. Я знаю, что этот пост был написан некоторое время назад, но Google до сих пор не отвечает на namePerson. Тем не менее, они обеспечивают:
http://axschema.org/namePerson/first
http://axschema.org/namePerson/last
Поэтому, чтобы ответить на вопрос Шрипада К выше, вы можете сделать это, используя приведенный выше код в качестве примера:
name = [
registration['http://axschema.org/namePerson/first'],
registration['http://axschema.org/namePerson/last']
].join(" ")
Я не знаю библиотеку Ruby OpenID, которую вы используете очень хорошо, но похоже, что вы пытаетесь использовать AX, смешивая атрибуты URI типа атрибута с расширением Simple Registration, которое является совершенно другим зверем. Вам следует (поскольку я не знаю это наизусть) проверить документы или примеры для использования OpenID с библиотекой, которую вы используете специально для AX, и убедиться, что вы следуете правильным шагам. Google поддерживает только AX, тогда как Yahoo поддерживает простую регистрацию (я не уверен, что Yahoo также поддерживает AX).
Для меня это все еще не работает с http://schema.openid.net/contact/email
но здесь https://groups.google.com/forum/?fromgroups= обнаружил, что это должен быть openid.ax.required, и это сработало.