Разработка пользовательской проверки пароля приводит недопустимого пользователя в консоль - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь добавить пользовательскую проверку пароля в проекте, который я использую для управления пользователями. Я успешно создал пользователя или изменил пароль пользователя вручную. Однако если я выйду из консоли и снова открою ее, мой действительный пользователь (на последнем шаге) станет недействительным.

Я использую устройство 4.6.2 и рельсы 5.2.0

Вот моя пользовательская модель

class User < ApplicationRecord


  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :password, 
            format: { with: /\A(?=.*\d)(?=.*[A-Z])(?=.*\W)[^ ]{7,}\z/,
                      message: 'Password should have more than 7 characters including 1 uppercase letter, 1 number, 1 special character'
                    }

end

Когда я пытаюсь в моей консоли

u = User.new(email: 'test@test.com', password: 'Abc123!', password_confirmation: 'Abc123!')
u.valid? # TRUE
u.save

Тогда

u = User.last # return exact above user
u.valid? # FALSE
u.errors.full_messages # Password Password should have more than 7 characters including 1 uppercase letter, 1 number, 1 special character

Есть что-то, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Там нет пароля для User.last.Причина, по которой возникает ошибка.

Очень похожая проблема: https://github.com/plataformatec/devise/wiki/How-To:-Set-up-simple-password-complexity-requirements

Ауу, вы можете установить длину пароля в config devise.rb.

config.password_length = 7..128

Incase uхотите установить формат пароля на devise.rb, попробуйте этот гем https://github.com/phatworx/devise_security_extension

0 голосов
/ 03 июня 2019

Спасибо, я придумала решение с использованием пользовательского валидатора

class User < ApplicationRecord
  validate :password_regex

  private

  def password_regex
    return if password.blank? || password =~ /\A(?=.*\d)(?=.*[A-Z])(?=.*\W)[^ ]{7,}\z/

    errors.add :password, 'Password should have more than 7 characters including 1 uppercase letter, 1 number, 1 special character'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...