在rails 3.2.13项目中,我使用的是设计插件。 如果我要更改密码,那么我需要为所有3个字段输入current_password,如果我尝试输入new_password&的不同密码confirm_password字段然后会显示“当前密码无效”等错误消息。
在模特中,
def valid_password?(password)
return false if encrypted_password.blank?
bcrypt = ::BCrypt::Password.new(encrypted_password)
password = ::BCrypt::Engine.hash_secret("#{password}#{self.class.pepper}", bcrypt.salt)
Devise.secure_compare(password, encrypted_password)
end
def update_with_password(params, *options)
current_password = params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
result = if valid_password?(current_password)
update_attributes(params, *options)
else
self.assign_attributes(params, *options)
self.valid?
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
false
end
result
end
在控制器中,
@user.update_with_password(params["user"])
验证应该像
一样工作当前密码&新密码应该存在
如果用户在current_password字段中输入了错误的密码,那么它应该检查是否有效
新密码&确认密码应符合
E.g:
1st case: (shows invalid password message)
Current Password = "password"
New Password = "abcdefg"
Confirm Password = "abcdefg"
2nd case: (accepts successfully)
Current Password = "password"
New Password = "password"
Confirm Password = "password"
如何通过输入不同的密码而不是当前(旧)密码来更改密码?