我有一个更改密码表单,要求用户提供他们当前的密码。使用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
...
答案 0 :(得分:1)
如果不向客户端传递数据库中所有(可能是)散列密码的大量列表,则无法验证客户端的密码正确性。这在计算上并不可行,但更糟糕的是,您将公开所有用户的哈希密码列表!对于黑客来说,至少打破其中的一小部分并不困难(我听说过人们解密的故事&gt; 80%的MD5哈希密码在<1小时内)。
因此,您必须与服务器通话才能验证密码。