Сессия Omniauth NoMethodError - PullRequest
       7

Сессия Omniauth NoMethodError

1 голос
/ 25 марта 2012

Я работаю над приложением rails, которое позволяет пользователям входить через facebook / twitter / linkedin, используя omniauth. Пока что пользователи могут зарегистрироваться и создать учетную запись с использованием аутентификаций, но они должны пройти валидацию и поэтому перенаправляются на страницу регистрации, где они должны ввести действительное имя, имя пользователя и адрес электронной почты. Я хочу, чтобы эти поля были уже заполнены, если это возможно, используя хеш request.env ["omniauth.auth"].

Вот мой код:

authentications_controller.rb

user = User.new 
user.apply_omniauth(omniauth)

if user.save
  flash[:notice] = "Signed in successfully."
  sign_in_and_redirect(:user, user)
else 
  session[:omniauth] = omniauth.except('extra')
  redirect_to new_user_registration_url
end

registrations_controller.rb:

def build_resource(*args)
  super
  if session[:omniauth]
    @user.apply_omniauth(session[:omniauth])
    @user.valid?
  end
 end

user.rb:

def apply_omniauth(omniauth)
  self.name = omniauth['user_info']['name'] if name.blank?
  self.email = omniauth['user_info']['email'] if email.blank?
  authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
end

Строка:

self.email = omniauth['user_info']['email'] if email.blank?

приводит к этой ошибке NoMethodError:

undefined method `[]' for nil:NilClass

Сессия [: omniauth] передается от контроллера регистраций omniauth в методе apply_omniauth. Как мне получить доступ к имени и электронной почте в этом сеансе?

Спасибо

1 Ответ

5 голосов
/ 26 марта 2012
  1. Быстрый ответ:

    omniauth.info.email # which is the same as omniauth['info']['email']
    
  2. Пояснительный ответ:

    Поместите это как первую строку вашего контроллера обратного вызова:

    render :text => "<pre>" + env["omniauth.auth"].to_yaml and return    
    

    Теперь попробуйте войти в систему, и вы сможете внимательно рассмотреть возвращенный хэш вложенных хэшей.

...