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

Posted

技术标签:

【中文标题】如何在 Ruby on Rails 中使用 Devise 验证密码强度?【英文标题】:How to validate password strength with Devise in Ruby on Rails? 【发布时间】:2013-01-04 00:51:53 【问题描述】:

我想强制用户在注册时选择强密码。

我知道,那里有很多 jquery 密码强度计,我很可能也会使用其中之一。但这并不能真正强制任何人选择强密码。注册表单也必须在不启用 js 的情况下可用,因此仍然可能使用弱密码进行注册。

帐户必须是最安全的,因为如果您已登录,您可以看到其他帐户的数据,我不想在任何情况下暴露这些数据。所以我想在这里寻求最大的安全性,因此我认为,只允许使用强密码是最重要的。

所以,

如何设置和自定义验证最低密码强度的要求?我只能在设计配置文件中找到密码长度。我应该使用其他 gem 来完成这项任务吗?

【问题讨论】:

【参考方案1】:

在撰写本文时(2018 年),我建议其他人在使用之前推荐的 Devise Security extension gem 之前考虑较新的 Devise Security 分支(截至 2016 年 3 月 v0.10.0 已过时,但 仍然 OG AF mang!)

编辑:This one 看起来更新,但 idk。

【讨论】:

【参考方案2】:

我最近发布了一个设计 gem,它使用 zxcvbn 库来拒绝弱密码:

https://github.com/bitzesty/devise_zxcvbn

【讨论】:

请注意,这最终会使用 ExecJS - 这是一个令人惊讶的依赖关系。 @jamesmoore 这是必需的,因为 zxcvbn 算法的纯 Ruby 版本没有返回与 JS 版本相同的结果,我们切换以便我们可以在前端和后端获得相同的结果. 有趣 - 这里绝对是一个设计权衡。我宁愿没有 js 依赖并获得稍微不同的结果(并且只在服务器上完成所有操作,因此客户端结果将无关紧要),但有些人需要相反的结果是有道理的。【参考方案3】:

您可以使用Devise Security extension,您可以在其中定义密码正则表达式验证(除其他外)并强制执行您想要的密码强度。

【讨论】:

听起来不错。我会试一试。不过,我之前没见过regex syntax used in the config file。 (?=...) 我明白它的作用,但我希望能稍微解释一下,? 的含义。 恕我直言,这些测试太天真了;它只需要一个数字和大写字母。一个没有数字的很长的密码仍然是安全的,但是Passw0rd(例如)是一个糟糕的密码(但仍然满足这些要求) @Carpetsmoker 是对的;尝试通过匹配正则表达式来提高密码强度是一个糟糕的主意。

以上是关于如何在 Ruby on Rails 中使用 Devise 验证密码强度?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails - Heroku上的Carrierwave错误

如何注销 Facebook - 在 Rails 应用程序中使用代码(Ruby on Rails Omniauth)

CoffeeScript - 如何在 ruby​​ on rails 中使用咖啡脚本?

如何在 ruby​​ on rails 中编写嵌套查询?

如何在 ruby​​ on rails 中使用 paysafe 支付解决方案? [关闭]

如何在 ruby​​ on rails 中访问 rails 助手和嵌入资产 javascript 文件中的 ruby​​?