Rails 3. *设计Facebook OmniAuth因NoMethodError而间歇性失败

时间:2012-04-25 00:00:21

标签: ruby-on-rails devise omniauth facebook-authentication

我按照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'

我无法重现。这个问题的根源是什么?

1 个答案:

答案 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

示例中显示的控制器代码将起作用 - 它将重定向用户以进行注册。