1

我正在使用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

非常感谢任何帮助

4

1 回答 1

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
于 2011-03-23T18:48:43.953 回答