Ruby on rails 设计自定义密码验证导致控制台中的用户无效

Ruby on rails 设计自定义密码验证导致控制台中的用户无效,ruby-on-rails,devise,Ruby On Rails,Devise,我试图在一个使用Desive进行用户管理的项目中添加自定义密码验证。我成功创建用户,或手动更改用户密码。然而,如果我退出控制台并再次打开它,我的有效用户(在最后一步)将变得无效 我正在使用Desive 4.6.2和rails 5.2.0 这是我的用户模型 class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberabl

我试图在一个使用Desive进行用户管理的项目中添加自定义密码验证。我成功创建用户,或手动更改用户密码。然而,如果我退出控制台并再次打开它,我的有效用户(在最后一步)将变得无效

我正在使用Desive 4.6.2和rails 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
然后


有什么我做错了吗?

用户没有密码。最后。这就是产生错误的原因

非常相似的问题:

另外,您可以在config designe.rb上设置密码长度

config.password_length = 7..128

如果你想在designe.rb上设置密码格式,试试这个gem

谢谢,我想出了一个使用自定义验证器的解决方案

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
class用户
正是我想要的!!!非常感谢你。
config.password_length = 7..128
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