我已经设置了 Devise 以允许用户使用电子邮件注册。现在我已经通过 LinkedIn 包含了一个带有omniauth 的登录。因此我不得不在用户表中保存提供者和 uid。
我现在遇到的问题是 provider 和 uid 的组合应该是唯一的。但是当用户决定使用电子邮件注册时,我没有任何提供者和 uid 的值。我怎样才能很好地处理这个问题?
我是 Rails 新手,没有找到任何其他答案。
非常感谢!
我已经设置了 Devise 以允许用户使用电子邮件注册。现在我已经通过 LinkedIn 包含了一个带有omniauth 的登录。因此我不得不在用户表中保存提供者和 uid。
我现在遇到的问题是 provider 和 uid 的组合应该是唯一的。但是当用户决定使用电子邮件注册时,我没有任何提供者和 uid 的值。我怎样才能很好地处理这个问题?
我是 Rails 新手,没有找到任何其他答案。
非常感谢!
我可能会填写manual
提供程序并使用SecureRandom.uuid
.
您可以User
使用before_validation
钩子在模型中执行此操作。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_validation(on: :create) do
if self.provider.nil?
self.provider = 'manual'
self.uid = SecureRandom.uuid
end
end
...
end
您还可以连接到创建用户的控制器。
如果您需要 uid 来防止用户使用同一电子邮件注册两次,我会使用电子邮件地址的 sha256 哈希。
从中获取request.env['omniauth.auth']
更多细节在这里:https ://github.com/plataformatec/devise/wiki/OmniAuth:-Overview