如何在设计中验证密码

how to authenticate password in devise

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

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

我用谷歌搜索,发现设计也使用 BCrypt gem 来加密密码。 所以,我也在我的项目中添加了 BCrypt gem 。 并且,我将 has_secure_password 添加到我的模型中,允许我使用 if admin.authenticate(password_old) 这种方法来验证密码是否正确。

class Admin < ActiveRecord::Base
  has_secure_password
end

完成上述所有操作后,出现错误

ArgumentError(参数数量错误(0 代表 1)):

另外,在模型中添加has_secure_password后,我不能create model.it只有评论has_secure_password

才可以

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

admin.valid_password?(password_old)

这将 return 一个布尔值。