2

我允许在我的 Rails 网站上进行 Facebook 身份验证,并为此使用 Omniauth。我最近在生产中收到以下错误:

ActiveRecord::RecordInvalid:验证失败:Email 不能为空,Email 无效

通常 Facebook 注册工作正常,那么什么会导致这个特定的错误?下面是我使用 Omniauth 创建用户的代码。

def self.create_from_omniauth(auth)
   where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.email = auth[:info][:email]
      user.password = SecureRandom.urlsafe_base64(n=10)
      user.save!
   end
end
4

1 回答 1

6

实际上,在omniauth-facebook repo中已经有很多关于这个问题的讨论。

我认为用户TeamRainless 是最接近答案的人:

一些用户提供了一个电话号码,facebook 将其用作主要的身份验证方法,而不是电子邮件地址。我相信电话号码会被加密,这就是通常的电子邮件地址。

此问题的唯一解决方案是将用户重定向到将完成注册过程的表单。查看Railscasts OmniAuth 第 2 部分,了解如何执行此操作。

于 2013-08-22T17:46:54.857 回答