Ruby on Rails 用户和密码验证

Posted

技术标签:

【中文标题】Ruby on Rails 用户和密码验证【英文标题】:Ruby on Rails user and password validation 【发布时间】:2018-10-24 03:26:45 【问题描述】:

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

我目前有工作:

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

validates :password, 
          presence: true,
          length:  minimum: 10 ,

我需要:

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

【问题讨论】:

【参考方案1】:

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 属性,您可以向用户显示他们缺少的格式要求。

【讨论】:

【参考方案2】:

第二个可以正常工作。但是在更新密码以外的文件时,它将失败,因为密码为 nil,并在尝试匹配(正则表达式)时抛出错误 nil

所以,只有在密码不为空时才需要运行此方法

【讨论】:

以上是关于Ruby on Rails 用户和密码验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中使用 Devise 验证密码强度?

Ruby on Rails 中身份验证的最佳解决方案 [关闭]

Ruby on Rails 无需密码即可更新用户属性

如何配置 Devise for Ruby on Rails 以将电子邮件和密码存储在用户模型之外的其他位置?

遇到致命问题:使用 ruby​​ on rails 对用户“postgres”进行对等身份验证失败

在 PHP 中匹配 128 个字符的密码哈希 - 使用 Ruby on Rails 加密