2011-01-14 7 views
0

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

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

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 плагин (по соображениям совместимости), когда я пытаюсь получить электронную почту приписывать я получаю следующее сообщение об ошибке:

ArgumentError в SessionsController # создать 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 и запрашиваю свой пароль, но я не могу понять, почему атрибут email перестает появляться при обновлении до Rails 3.

+0

возможно дубликат [Рубин open_id_authentication с Google OpenID] (http://stackoverflow.com/questions/2492043/ruby-open-id-authentication- с-google-openid) – pgb

+0

Проверить [этот ответ] (http://stackoverflow.com/questions/1956522/retrieve-openid-ax-attributes-from-google-yahoo-in-rails/1960389#1960389) - этот вопрос похоже на дублирующий вопрос. – tomeduarte

ответ

0

Найден ответ here. Код о том, как извлечь атрибут электронной почты 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 
Смежные вопросы