在RoR中更改某些字段时验证密码

时间:2010-05-21 15:27:15

标签: ruby-on-rails validation

我正在构建一个RoR 3应用程序,一个社区。它有一个用户模型和一些字段。

因此,当用户更新某个字段(如他/她的生日)时,我想验证用户输入的密码是否与数据库中的密码相同。这样我知道这是正确的用户试图改变生日。

所以我问你如何创建这样的验证器。

此外,我希望能够指定用户必须验证要更改的密码的字段数组。

2 个答案:

答案 0 :(得分:1)

一旦熟悉了Rails框架,这实际上很容易做到。

车型/ User.rb
class 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

答案 1 :(得分:0)

即使构建用户身份验证和授权并不难 - 我建议使用类似“AuthLogic”或“Devise”宝石/插件的内容,这些内容很可能会覆盖您需要的90%的功能。如果需要,您可以自定义/添加新功能。

这些插件将为您完成大部分繁重的工作:生成MVC,创建数据库,进行适当的安全检查,甚至电子邮件密码恢复等。