首页 > 解决方案 > 在 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

标签: rubyruby-on-rails-5

解决方案


如何创建另一个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
                             )

推荐阅读