2

我遵循了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:infind_for_facebook_oauth'

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

4

1 回答 1

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

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

于 2012-04-26T20:00:41.193 回答