我按照https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview中描述的步骤操作,并在用户模型中使用了这样的方法:
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token.extra.raw_info
if user = self.find_by_email(data.email)
user
else # Create a user with a stub password.
self.create!(:email => data.email, :password => Devise.friendly_token[0,20])
end
end
我间歇地得到像
这样的错误omniauth_callbacks #facebook中发生NoMethodError
未定义的方法email' for "false":String
app/models/user.rb:138:in
find_for_facebook_oauth'
我无法重现。这个问题的根源是什么?
答案 0 :(得分:1)
我不确定是什么原因引起的。这是一个简单地创建一个新对象的解决方法:
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token.extra.raw_info
if data == "false"
self.new
elsif user = self.find_by_email(data.email)
user
else # Create a user with a stub password.
self.create!(:email => data.email, :password => Devise.friendly_token[0,20])
end
end
示例中显示的控制器代码将起作用 - 它将重定向用户以进行注册。