open_id_authentication на Rails 3 - PullRequest
       4

open_id_authentication на Rails 3

0 голосов
/ 14 января 2011

Я переношу приложение из Rails 2 в Rails 3. Приложение использует Open ID для входа в Google, и я использую плагин open_id_authentication.

Код выглядит примерно так:

options = {
  :identifier => 'https://www.google.com/accounts/o8/id',
  :required => [ 'http://axschema.org/contact/email', 
                 'http://axschema.org/namePerson/first',
                 'http://axschema.org/namePerson/last' ], 
  :oauth => { 
     :consumer =>  OAUTH_CONSUMER_TOKEN,
     :scope => "http://www.google.com/m8/feeds/" 
  } 
} 
authenticate_with_open_id('https://www.google.com/accounts/o8/id',  options)
   do |result, identity_url, registration, extended_attributes|

   email = registration["http://axschema.org/contact/email"]

end

Это работало правильно на Rails 2, но когда я обновил до Rails 3 и обновил плагин Open ID (по соображениям совместимости), когда я пытаюсь получить атрибут email, я получаю следующую ошибку:

ArgumentError в SessionsController # create http://schema.openid.net/contact/email не является определенным простым полем регистрации

ruby-openid (2.1.8) lib/openid/extensions/sreg.rb:32:in `check_sreg_field_name'
ruby-openid (2.1.8) lib/openid/extensions/sreg.rb:266:in `[]'
app/controllers/sessions_controller.rb:33:in `open_id_authentication'
vendor/plugins/open_id_authentication/lib/open_id_authentication.rb:114:in `complete_open_id_authentication'
vendor/plugins/open_id_authentication/lib/open_id_authentication.rb:90:in `authenticate_with_open_id'

Что означает эта ошибка и как я могу это сделатьпочини это?Я знаю, что связь работает нормально, так как я получаю страницу Google и спрашиваю мой пароль, но я не могу понять, почему атрибут электронной почты перестал появляться при обновлении до Rails 3.

1 Ответ

0 голосов
/ 14 января 2011

Нашел ответ здесь . Код для получения атрибута AX электронной почты приведен ниже:

options = {
  :identifier => 'https://www.google.com/accounts/o8/id',
  :required => [ 'http://axschema.org/contact/email', 
                 'http://axschema.org/namePerson/first',
                 'http://axschema.org/namePerson/last' ], 
  :oauth => { 
     :consumer =>  OAUTH_CONSUMER_TOKEN,
     :scope => "http://www.google.com/m8/feeds/" 
  } 
} 
authenticate_with_open_id('https://www.google.com/accounts/o8/id',  options)
   do |result, identity_url, registration, extended_attributes|

   ax_response = OpenID::AX::FetchResponse.from_success_response(request.env[Rack::OpenID::RESPONSE])

   email = ax_response['http://axschema.org/contact/email'].first

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...