【问题标题】:Ruby on Rails user and password validationRuby on Rails 用户和密码验证
【发布时间】: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. 必须至少包含一个大写字母,一个特殊字母 一个字符、一个数字和一个小写字母

【问题讨论】:

    标签: ruby-on-rails validation authentication passwords bcrypt


    【解决方案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

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

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 2011-07-28
        相关资源
        最近更新 更多