Ruby Rails 用户和密码验证
Ruby on Rails user and password validation
我对仅使用 bcrypt 的用户名和密码的用户注册验证有特定要求(没有设计!)
我目前有工作:
validates :username,
presence: true,
length: { minimum: 2, maximum: 15 },
uniqueness: true
validates :password,
presence: true,
length: { minimum: 10 },
我需要:
- 用户名:
- 只能包含字母、数字、破折号和下划线
- 密码:
- 必须至少包含一个大写字母,一个特殊字母
字符,一个数字和一个小写字母
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
然后在你的模型中写下这一行:
validate :password_requirements_are_met
因此,在您的表单页面中,通过对象的 .errors
属性,您可以向用户显示他们所缺少的格式要求。
第二个可以正常工作。但是在更新密码以外的文件时它将失败,因为密码为零,并抛出错误 nil trying match(regex)
因此,只有当密码不为空时,您才需要运行此方法
我对仅使用 bcrypt 的用户名和密码的用户注册验证有特定要求(没有设计!)
我目前有工作:
validates :username,
presence: true,
length: { minimum: 2, maximum: 15 },
uniqueness: true
validates :password,
presence: true,
length: { minimum: 10 },
我需要:
- 用户名:
- 只能包含字母、数字、破折号和下划线
- 密码:
- 必须至少包含一个大写字母,一个特殊字母 字符,一个数字和一个小写字母
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
然后在你的模型中写下这一行:
validate :password_requirements_are_met
因此,在您的表单页面中,通过对象的 .errors
属性,您可以向用户显示他们所缺少的格式要求。
第二个可以正常工作。但是在更新密码以外的文件时它将失败,因为密码为零,并抛出错误 nil trying match(regex)
因此,只有当密码不为空时,您才需要运行此方法