【问题标题】:Validating a Devise User password WITHOUT changing it验证设计用户密码而不更改它
【发布时间】:2014-10-23 22:54:24
【问题描述】:

我正在使用 Devise 和 devise_security_extension。

https://github.com/plataformatec/devise

https://github.com/phatworx/devise_security_extension

我试图弄清楚如何在不更新用户记录的情况下验证提供的密码。 验证(密码没用过,密码够复杂……)

例如:

john = User.find(1)
john.password              = "Testing"
john.password_confirmation = "Testing"
result = john.save

结果将返回真或假。使用 result.errors 我会得到相关的错误消息(这正是我想要的,但没有真正改变这个用户密码)。

我的问题是这真的会改变这个用户(对象)的密码。这会导致 old_passwords 出现问题。

  • 有什么方法可以进行试运行吗? (结果 = john.save_dry_run)

仅供参考:

我已经尝试更改用户密码并在获得结果后将其更改回来。但这真的很难看,而且设计 old_passwords 表也很麻烦。

我希望我的问题足够清楚。如果您需要任何进一步的信息,请告诉我!

【问题讨论】:

  • 在你的例子中调用john.valid?而不是john.save怎么样?
  • 我现在就试试。如果它那么容易,我会同时高兴和生气。 (感谢您的建议)
  • 谢谢...这就是答案我很抱歉提出这样的问题。
  • 不用担心,这就是 Stackoverflow 的用途!我已将解决方案添加为答案,以便可以接受。

标签: security validation ruby-on-rails-4 devise passwords


【解决方案1】:

您应该调用valid? 而不是在您的示例中保存。这只会运行模型验证,而不会实际将任何数据保存到数据库中:

john = User.find(1)
john.password = "Testing"
john.password_confirmation = "Testing"
result = john.valid?

您可以在the Rails documentation找到更多信息。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2012-05-26
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多