当前位置: 首页 > 知识库问答 >
问题:

Ruby on Rails用户和密码验证

乐正嘉瑞
2023-03-14

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

我目前正在工作:

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

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

我需要:

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

共有2个答案

端木骞尧
2023-03-14

第二个会很好。但是,当更新除密码以外的字段时,它将失败,因为密码为nil,并抛出错误nil trying match(regex)

因此,只有当密码不为空时,您才需要运行此方法

金兴朝
2023-03-14

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

格式: { 与: /\A[\w-] \z/,消息: “您的格式要求” }

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

 类似资料:
  • 客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢

  • 我有一个登录表格。如下: 我在提交表单时通过Ajax验证用户名和密码 在函数中,可以正确地对空字符或无效字符进行验证,但我想向用户返回密码错误或用户名错误的错误。 Ajax调用如下: 具有PHP数据库连接和代码 这样,返回的唯一错误是“无效凭据”。请让我知道如何分别验证用户名和密码。

  • 我用哈希法通过了一个密码 这将密码作为哈希值存储到数据库中。但是当我试图通过 无论密码是否正确,它都会告诉我密码是正确的。有没有办法解决这个问题,所以我可以散列密码,但登录时输入(非散列)密码。

  • 问题内容: 正在尝试在提示(URL给定)中输入数据,以下代码给我一个错误。请帮我这些吗? 我尝试过: 这也是行不通的。 问题答案: 当你一起工作通过 3.6.1可以绕过通过嵌入的弹出和在自身如下。 此解决方案将打开URL http://the-internet.herokuapp.com/basic_auth并使用有效的username和password凭据进行身份验证。

  • 是否可以在Flatter中使用用户名和密码(而不是电子邮件和密码)实现Firebase身份验证?有没有办法用Firebase Auth插件来实现这一点?

  • 在我的登录PHP文件中,我有这些 在我的注册PHP文件中,我有这个。 现在,基本上我使它哈希密码,并插入自己的数据库注册。确实如此。 然而,它无法核实。这两个结果给出了两个不同的哈希,我不知道我可能做错了什么。我也试着让它再次散列输入并检查数据库中的password_hash,但那不起作用... 正确的使用方法是什么? (另外,$passSign和$userInput是输入字段,它确实获取用户名/