如何在设计中验证密码
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 一个布尔值。
我想在更改密码之前在设计中验证密码:
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 一个布尔值。