Devise сохраняет пользователя с пустым UID - PullRequest
0 голосов
/ 19 сентября 2019

Выполнение инструкции ниже, как ожидается, сохранит пользователя с тем же адресом электронной почты и 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 пользователя электронной почтой.Я вставил код модели пользователя ниже, чтобы помочь отследить любой странный код.

Среда

  • Ruby 2.4.1
  • Rails 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

1 Ответ

0 голосов
/ 19 сентября 2019

Решите это, включая проблему DeviseTokenAuth::Concerns::User в модели User.
¯_ (⊙︿⊙) _ / ¯

ответ на ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...