【问题标题】:Devise is saving user with empty UID设计正在使用空 UID 保存用户
【发布时间】:2019-09-19 17:05:49
【问题描述】:

运行下面的语句,期望用相同的电子邮件和 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。 我已经粘贴了下面的用户模型代码,以帮助跟踪任何奇怪的代码。

环境

  • 红宝石 2.4.1
  • 导轨 5.2.3
  • 设计 4.7.1

用户模型

# 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

【问题讨论】:

    标签: ruby-on-rails devise rubygems


    【解决方案1】:

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

    answer to reference

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多