ruby - 在 OmniAuth 的情况下如何在用户创建中处理电子邮件唯一性验证
问题描述
如何在用户创建中处理电子邮件验证?
我正在使用多个提供商(谷歌、脸书)。因为 Gmail 和 Facebook 都使用相同的邮件 ID 创建。
def self.from_omniauth(auth)
user = User.where(provider: auth.provider, email: auth.info.email).first
user ||= User.create!(provider: auth.provider, uid: auth.uid, name: auth.info.name, email: auth.info.email, password: Devise.friendly_token[0,20])
user
end
解决方案
如何创建另一个UserProvider
模型哪个belongs_to
User
模型。
因此,当用户使用第三方注册/登录您的系统时,您可以管理是否email
使用它来创建新用户。然后,UserProvider
如果该用户不存在,则为该用户创建新记录
user = User.where(:email => auth.info.email).first
user ||= User.create!(name: auth.info.name, email: auth.info.email, password: Devise.friendly_token[0,20])
user_provider = UserProvider.find_or_create_by(
provider: auth.provider,
uid: auth.uid,
user_id: user.id
)
推荐阅读
- c# - 此 GetUniqueInt() 方法的时间复杂度
- node.js - 无法使用 node.js 安装 appium
- oracle - 如何确保永远不会得到 ora-01438:值大于此列允许的指定精度?
- c# - 尝试下载 pdf 文件时线程被中止的问题
- ansible - Ansible playbook 使用 sed 将查找废气放入文本文件
- haskell - 代数数据类型字段名称无法识别
- pandas - 将制表符和换行符分隔的字符串转换为 pandas 数据框
- java - Java - 防止 HashMap 影响原始值
- cabal - 如何在 cabal 或堆栈文件中指定 ghc 版本
- powershell - IIS 的 Powershell:“Foreach”循环失败