如何在设计中验证密码

时间:2015-03-17 05:26:05

标签: ruby-on-rails ruby web

我想在更改密码之前在设计中验证密码:

def admin_update_password
    admin = Admin.find(current_admin.id)
    @result = false
    @error_msg = Hash.new
    #update admin password
    password_old = params[:admin][:password_old]
    password_new = params[:admin][:password_new]
    password_new_confirmation = params[:admin][:password_new_confirmation]
    unless password_old.blank? && password_new.blank? && password_new_confirmation.blank?
      if password_new == password_new_confirmation 
        if admin.authenticate(password_old)
          #generate new password for admin accroding to given from front-end
          admin.update_attribute(:encrypted_password, BCrypt::Password.create(password_new))
          @result = true
        else
          @error_msg[:error_password] = "old password error"
        end
      else
        @error_msg[:old_password] = "new password and old password is not same"
      end
    else
      @error_msg[:is_nil] = "old password, new password and password confirmation can not be blank"
    end
    respond_to do |format|
      format.html { render nothing: true }
      format.js { render partial: 'shared/op_result' }
    end
  end
我用google搜索,发现设计也使用BCrypt gem加密密码。 所以,我在我的项目中添加了BCrypt gem。 并且,我将has_secure_password添加到我的模型中,允许我使用if admin.authenticate(password_old)此方法来验证密码是否正确。

class Admin < ActiveRecord::Base
  has_secure_password
end

在我完成之后,我收到了一个错误

ArgumentError (wrong number of arguments (0 for 1)):

更重要的是,在将has_secure_password添加到模型后,我无法create模型。只有在我评论has_secure_password

时,它才会正常

1 个答案:

答案 0 :(得分:1)

要检查密码是否正确,您可以使用:

admin.valid_password?(password_old)

将返回一个布尔值。