Я использую плагин 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, адрес электронной почты возвращается как 't'.
Я неправильно обращаюсь с этим? Как я могу получить адрес электронной почты пользователя от Google? Придется ли мне прыгать через другие обручи для поддержки Yahoo?