извлечение электронного письма из хеша omniauth для проверки модели пользователя - PullRequest
1 голос
/ 22 марта 2011

Я использую omniauth и devise для входа пользователей с их учетными записями в Facebook, но все работает, когда я пытаюсь извлечь их электронную почту из хэша, я получаю эту ошибку:

NoMethodError in AuthenticationsController#create
undefined method `id' for "/":String

Вот полныйжурнал ошибок: http://pastie.org/1698569

Ошибка исчезает, и после обновления я могу войти в систему очень хорошо!

РЕДАКТИРОВАТЬ: Оказывается, что строка 22 в моем контроллере аутентификации

     sign_in_and_redirect_to(:user, root_path) 

По какой-то причине после запуска этого метода я не могу подписать_пользователя: user

 def apply_facebook(omniauth)                    
   if (extra = omniauth['extra']['user_hash'] rescue false)  
   self.email = (extra['email'] rescue '')
 end
end

Однако, если я не запускаю этот метод, он может просто отлично подписать

Вот мои контроллеры / модель http://pastie.org/1698453

Очень ценю любую помощь

1 Ответ

1 голос
/ 23 марта 2011

Вы не можете использовать root_path в качестве второго параметра для sign_in_and_redirect. Вот несколько доступных способов его использования:

sign_in_and_redirect :user, @user                      # sign_in(scope, resource)
sign_in_and_redirect @user                             # sign_in(resource)
sign_in_and_redirect @user, :event => :authentication  # sign_in(resource, options)
sign_in_and_redirect @user, :bypass => true            # sign_in(resource, options)

Поскольку ваш второй параметр не является ни ресурсом, ни опциями (это строка), вы получаете сообщение об ошибке. Вам нужно изменить его на:

sign_in_and_redirect(:user, user) # based on your pastie

Если вы хотите настроить путь возврата, чтобы заставить его перейти на другой URL-адрес после входа в систему, вы можете сделать что-то подобное в вашем ApplicationController:

def after_sign_in_path_for(resource)
  "/go/to/this/path"
end
...