0

我已经设置了 Devise 以允许用户使用电子邮件注册。现在我已经通过 LinkedIn 包含了一个带有omniauth 的登录。因此我不得不在用户表中保存提供者和 uid。

我现在遇到的问题是 provider 和 uid 的组合应该是唯一的。但是当用户决定使用电子邮件注册时,我没有任何提供者和 uid 的值。我怎样才能很好地处理这个问题?

我是 Rails 新手,没有找到任何其他答案。

非常感谢!

4

2 回答 2

0

我可能会填写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 哈希。

于 2016-06-20T09:04:35.463 回答
0

从中获取request.env['omniauth.auth']

更多细节在这里:https ://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

于 2016-06-20T07:14:08.423 回答