ruby-on-rails - 用户注册 Facebook 时如何修复空白电子邮件错误(通过 Omniauth)

标签 ruby-on-rails ruby-on-rails-3 validation authentication omniauth

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

ActiveRecord::RecordInvalid: Validation failed: Email can't be blank, Email is invalid

通常 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

最佳答案

其实关于这个issue in the omniauth-facebook repo已经有很多讨论了.

我认为用户TeamRainless is the one who got closest to the answer:

Some users have supplied a phone number which facebook uses as it's main authentication method instead of the email address. I believe the phone number is then encrypted and that becomes what the email address would normally be.

此问题的唯一解决方案是将用户重定向到将完成注册过程的表单。查看Railscasts OmniAuth Part 2 episode关于如何做到这一点。

关于ruby-on-rails - 用户注册 Facebook 时如何修复空白电子邮件错误(通过 Omniauth),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384558/

相关文章:

ruby-on-rails - 如何使用 RSpec 测试电子邮件 header

ruby-on-rails - RubyMine 代码自动补全

ruby-on-rails - Rails update_all 在一个带有索引的查询中

ruby-on-rails-3 - 如何在更新时锁定PostgreSQL中的某些行并让其他行读取?

ruby-on-rails - rails 生成 - "Could not find generator"

javascript - 循环遍历所有表单元素

ruby-on-rails - Ruby - 使用 SSL 连接并通过客户端证书进行身份验证 - sslv3 警报错误证书

ruby-on-rails - 无法使用 JRuby 安装 SQLITE3

java - 使用 enctype ="multipart/form-data"时请求 getParameter 始终为 null

validation - Symfony2 主页 HTTP 缓存验证和独立 ESI