如何使用client_side_validations gem验证密码?

时间:2013-06-11 00:04:46

标签: ruby-on-rails client-side-validation

我有一个更改密码表单,要求用户提供他们当前的密码。使用client_side_validations gem,是否可以使用远程验证器/ javascript验证当前密码是否正确?如果是这样,怎么样?

应用/视图/口令/ new.html.haml

= simple_form_for @password_form, url: passwords_path, method: :post, validate: true do |f|
  = f.input :original_password
  = f.input :new_password
  = f.input :new_password_confirmation, required: true
  = f.submit 'Save'

应用/形式/ password_form.rb

  ...

  attr_accessor :original_password, :new_password
  validate :verify_original_password
  validates_presence_of :original_password, :new_password
  validates_confirmation_of :new_password
  validates :new_password, password: true

  def verify_original_password
    unless @user.authenticate(original_password)
      errors.add :original_password, "is not correct"
    end
  end

  ...

1 个答案:

答案 0 :(得分:1)

如果不向客户端传递数据库中所有(可能是)散列密码的大量列表,则无法验证客户端的密码正确性。这在计算上并不可行,但更糟糕的是,您将公开所有用户的哈希密码列表!对于黑客来说,至少打破其中的一小部分并不困难(我听说过人们解密的故事&gt; 80%的MD5哈希密码在<1小时内)。

因此,您必须与服务器通话才能验证密码。