验证设备用户密码而不更改它

时间:2014-08-29 21:32:24

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

我正在使用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

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

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

  • 有没有办法干跑? (result = john.save_dry_run)

供参考:

我已经尝试更改用户密码,并在获得结果后将其更改回来。但是这非常难看,并且使用devise old_passwords表也会遇到很多麻烦。

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

1 个答案:

答案 0 :(得分:0)

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

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

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