【发布时间】:2011-02-22 10:16:18
【问题描述】:
我正在构建一个 RoR 3 应用程序,一个社区。它有一个用户模型和一些字段。
因此,当用户更新某个字段(例如他/她的生日)时,我想验证用户输入的密码是否与数据库中的密码相同。这样我就知道尝试更改生日是正确的用户。
所以我问你如何创建这样的验证器。
我还希望能够指定一个数组,其中包含用户必须验证密码才能更改的字段。
【问题讨论】:
我正在构建一个 RoR 3 应用程序,一个社区。它有一个用户模型和一些字段。
因此,当用户更新某个字段(例如他/她的生日)时,我想验证用户输入的密码是否与数据库中的密码相同。这样我就知道尝试更改生日是正确的用户。
所以我问你如何创建这样的验证器。
我还希望能够指定一个数组,其中包含用户必须验证密码才能更改的字段。
【问题讨论】:
一旦您熟悉了 Rails 框架,这实际上很容易做到。
模型/用户.rbclass User < ActiveRecord::Base
validate :correct_password?, :if => :check_password?
def check_password?
[birthday_changed?, other_field_changed?].any?
end
def correct_password?
# without knowing more about how you store the password
# this probably won't work with your code directly
errors.add_to_base("Must provide password") unless password?
errors.add_to_base("Incorrect password") unless password == User.find_by_id(id).password
end
end
【讨论】:
即使构建用户身份验证和授权并不难——我建议使用“AuthLogic”或“Devise”gems/plugins 之类的东西,它们很可能涵盖您需要的 90% 的功能。如果需要,您还可以自定义/添加新功能。
此类插件将为您完成大部分繁重的工作:生成 MVC、创建数据库、进行适当的安全检查,甚至电子邮件密码恢复等。
【讨论】: