具体来说,我正在使用Devise和Typus。但是,我认为我的误解在于我对Devise的了解。
我正在尝试实现当您想通过表单更改重要模型时的功能,您必须提供当前密码以确认您可以更改它,即谷歌。
现在,我可以登录并更改用户模型的任何字段。包括密码,无需事先确认我的密码。不好。所以,我已经在表单中添加了current_password。但那没有做任何事情。然后我尝试验证current_password上的状态。然后它似乎不接受它的任何价值。
谷歌没有帮助我。所有相关帖子都是关于删除current_password而不是确认它。这让我觉得我误解了current_password的使用。有谁愿意分享一些见解?谢谢。
答案 0 :(得分:6)
您应该将密码字段添加到表单中,然后在控制器的操作中,您可以使用以下命令验证密码:
user.valid_password?(params[:user][:password])
请注意,您可能应该将params [:user] [:password]更改为表单中密码字段的参数名称(可能只是params [:password])。
希望它有所帮助。
答案 1 :(得分:4)
实际上,设计有一个内置的方法:
user.update_with_password(params, *options)
您可以阅读rdoc here。
在:current_password匹配时更新记录属性,否则返回错误:current_password。它还会自动拒绝:password和:password_confirmation,如果它们是空白的。