0

我的邮箱只有两次失败的登录尝试。查看数据很快就发现了问题:Facebook 正在向我的 Omniauth-Controller 发送一个 11 位数字而不是电子邮件地址。因此无法保存用户模型,因为它在迁移文件中的列上使用电子邮件约束创建。有人知道在这种情况下我应该如何处理数据吗?我真的不在乎用户是否有格式错误的电子邮件地址,所以理论上我可以将列更改为普通字符串等。有更好的解决方案吗?

奖金问题:

  • facebook + omniauth + devise 环境中已知不可靠的任何其他领域?
  • 任何已知与 google_oauth2插件不可靠的字段?
4

2 回答 2

1

我认为您正在使用类似于以下的功能...

def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
  user = User.where(:provider => auth.provider, :uid => auth.uid).first
  unless user
    user = User.create(name:auth.extra.raw_info.name,
                       provider:auth.provider,
                       uid:auth.uid,
                       email:auth.info.email,
                       password:Devise.friendly_token[0,20]
                       )
  end
  user
end

您确定 auth.info.email 映射到正确的参数吗

编辑:

由于以上都很好。我猜这两个选项是删除您所说的约束或执行您自己的字符串检查,或者它包含@或其他内容,如果传递的数据格式不正确,您可以插入一个虚拟电子邮件地址。

于 2012-07-17T15:50:46.857 回答
0

这就是我快速而肮脏地解决它的方法:

# facebook can send malformed/invalid email
email = auth[:info][:email]
unless email =~ /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$/i
email = "#{Time.now.to_i}@MALFORMED_EMAIL.com"
于 2012-07-17T22:28:56.993 回答