我正在使用omniauth并设计用他们的facebook帐户登录用户,一切正常但是当我尝试从哈希中取出他们的电子邮件时我得到了这个错误:
NoMethodError in AuthenticationsController#create
undefined method `id' for "/":String
以下是错误的完整日志:http://pastie.org/1698569
错误消失了,让我在刷新后就可以正常登录了!
编辑:事实证明它在我的身份验证控制器中的第22行
sign_in_and_redirect_to(:user, root_path)
由于某种原因,在运行此方法后,我无法在用户
中签名 def apply_facebook(omniauth)
if (extra = omniauth['extra']['user_hash'] rescue false)
self.email = (extra['email'] rescue '')
end
end
但是,如果我不运行该方法,那么它可以sign_in_and_redirect_to就好了
这是我的控制器/型号http://pastie.org/1698453
非常感谢任何帮助
答案 0 :(得分:1)
您不能将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