我想在更改密码之前在设计中验证密码:
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
答案 0 :(得分:1)
要检查密码是否正确,您可以使用:
admin.valid_password?(password_old)
将返回一个布尔值。