Ruby on Rails 用户和密码验证

Uni*_*sis 1 authentication passwords validation ruby-on-rails bcrypt

我对仅使用 bcrypt 的用户名和密码的用户注册验证有特定要求(没有设计!)

我目前有工作:

validates :username,
          presence: true,
          length: { minimum: 2, maximum: 15 },
          uniqueness: true

validates :password, 
          presence: true,
          length: { minimum: 10 },
Run Code Online (Sandbox Code Playgroud)

我需要:

  • 用户名:
    1. 只能包含字母、数字、破折号和下划线
  • 密码:
    1. 必须至少包含 1 个大写字母、1 个特殊字符、1 个数字和 1 个小写字母

Xul*_*lnn 6

1 . 对于您的第一个需要,您可以将其添加到您的用户名中validates

format: { with: /\A[\w-]+\z/, message: "your format requirements" }

2 . 对于您的第二个需求,我没有找到它的正则表达式,您可以尝试添加自定义验证。

首先将此验证方法添加到您的模型中:

def password_requirements_are_met
  rules = {
    " must contain at least one lowercase letter"  => /[a-z]+/,
    " must contain at least one uppercase letter"  => /[A-Z]+/,
    " must contain at least one digit"             => /\d+/,
    " must contain at least one special character" => /[^A-Za-z0-9]+/
  }

  rules.each do |message, regex|
    errors.add( :password, message ) unless password.match( regex )
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在你的模型中写下这一行:

validate :password_requirements_are_met
Run Code Online (Sandbox Code Playgroud)

因此,在您的表单页面中,通过对象的.errors属性,您可以向用户显示他们缺少的格式要求。