Devise 正在用空 UID 保存用户

Devise is saving user with empty UID

运行 下面的语句,期望用相同的电子邮件和 UID 保存用户:email == uid:

当前行为

user = User.create(email: 'myemail@gmail.com', password: '1' * 8, password_confirmation: '1' * 8)
user.email # 'myemail@gmail.com'
user.uid # nil

异常行为

user = User.create(email: 'myemail@gmail.com', password: '1' * 8, password_confirmation: '1' * 8)
user.email # 'myemail@gmail.com'
user.uid # 'myemail@gmail.com'

我的用户模型有什么问题?我记得,当我创建一个新用户时,该设备会自动用电子邮件填充用户的 uid。 我已经在下面粘贴了用户模型代码,以帮助跟踪任何奇怪的代码。

环境

用户模型

# frozen_string_literal: true

class User < ApplicationRecord # :nodoc:
  attr_accessor :skip_password_validation

  self.table_name = 'users'

  include Status

  enum role: Role.to_enum

  # Include default devise modules.
  devise :company_authenticatable, :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :timeoutable

  belongs_to :person, class_name: 'Pessoa'
  accepts_nested_attributes_for :person

  belongs_to :company, class_name: 'Empresa'
  has_many :permissions,
           class_name: 'UserPermission',
           dependent: :delete_all,
           foreign_key: 'user_id'
  accepts_nested_attributes_for :permissions
  validates_associated :permissions

  before_validation :load_predefined_permissions

  # validations
  validates :permissions, presence: true, if: -> { role.to_s == 'custom' }
  validates_presence_of :role, :person

  def timeout_in
    15.minutes
  end

  def active_for_authentication?
    super && account_active?
  end

  def account_active?
    manager? || (ativo? && permissions.count.positive?)
  end

  def skip_password_validation?
    ['true', true, 1, '1'].include?(skip_password_validation)
  end

  def permission?(subject_class, action)
    permissions.any? { |permission| permission.subject_class == subject_class && permission.action == action }
  end

  def cached_permissions
    Rails.cache.fetch("#{cache_key_with_version}/permissions") do
      permissions
    end
  end

  def clear_cached_data
    Rails.cache.delete("#{cache_key_with_version}/permissions")
  end

  protected

  def password_required?
    return false if skip_password_validation?

    super
  end

  private

  def load_predefined_permissions
    return if role.to_s == 'custom' || manager? || (!role_changed? && !permissions.empty?)

    self.permissions = UserPermission.initialize_by_user(self)
  end
end

解决它,包括 User 模型中的 DeviseTokenAuth::Concerns::User 问题。
¯_(⊙︿⊙)_/¯

answer to reference