用户与Facebook签约时如何修复空白电子邮件错误(通过Omniauth)

am-*_*ils 2 authentication validation ruby-on-rails omniauth ruby-on-rails-3

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

ActiveRecord :: RecordInvalid:验证失败:电子邮件不能为空,电子邮件无效

通常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
Run Code Online (Sandbox Code Playgroud)

Ash*_*aka 6

实际上,omn​​iauth-facebook repo中有很多关于这个问题的讨论.

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

一些用户提供了一个电话号码,Facebook使用它作为主要的身份验证方法而不是电子邮件地址.我相信电话号码然后被加密,这将成为电子邮件地址通常的内容.

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