【问题标题】:Devise, validate current_password if any important fields have been changed如果任何重要字段已更改,则设计并验证 current_password
【发布时间】:2011-09-02 06:20:52
【问题描述】:

具体来说,我将 Devise 与 Typus 一起使用。但是,我认为我的误解在于我对 Devise 的了解。

我正在尝试实现当您想通过表单更改重要模型时,您必须提供当前密码以确认您可以更改它的功能,例如谷歌。

现在,我可以登录并更改我的用户模型的任何字段。包括密码,无需事先确认我的密码。不好。因此,我在表单中添加了 current_password。但这并没有做任何事情。然后我尝试验证 current_password 上的存在。然后它似乎不接受任何价值。

Google 没有帮助我。所有相关帖子都是关于删除 current_password 而不是确认它。这让我觉得我误解了 current_password 的使用。

有人愿意分享一些见解吗?谢谢。

【问题讨论】:

  • 如果您发布部分代码(至少是表单和控制器)会有所帮助。

标签: ruby-on-rails devise typus


【解决方案1】:

您应该将密码字段添加到表单中,然后在控制器的操作中您可以使用以下方法验证密码:

user.valid_password?(params[:user][:password])

请注意,您可能应该将 params[:user][:password] 更改为表单中密码字段的参数名称(可能只是 params[:password])。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    实际上,devise 有一个内置方法:

    user.update_with_password(params, *options)你可以阅读rdoc here

    当 :current_password 匹配时更新记录属性,否则在 :current_password 上返回错误。如果 :password 和 :password_confirmation 为空,它也会自动拒绝。

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2019-07-23
      • 2019-05-18
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2010-12-21
      相关资源
      最近更新 更多