Ruby on rails 轨道&x2B;设计:如果密码未更改,如何获取错误消息?
我正在使用Desive进行身份验证。我希望用户能够更改其密码-因此我已将此操作添加到我的控制器:Ruby on rails 轨道&x2B;设计:如果密码未更改,如何获取错误消息?,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我正在使用Desive进行身份验证。我希望用户能够更改其密码-因此我已将此操作添加到我的控制器: def update_password if current_user.update_with_password(devise_parameter_sanitizer.sanitize(:account_update)) sign_in(current_user, bypass: true) redirect_to settings_path, notice: &qu
def update_password
if current_user.update_with_password(devise_parameter_sanitizer.sanitize(:account_update))
sign_in(current_user, bypass: true)
redirect_to settings_path, notice: "Your password has been updated!"
else
current_user.errors.each do |err|
puts "-> #{err.inspect}"
end
redirect_to settings_path, alert: "Problem: #{current_user.errors.inspect}"
end
end
如果用户输入正确的当前密码和新密码(加上其确认),则密码将更改-这很好
但是,当出现问题时,例如新密码+其确认不匹配,或者如果输入的当前密码不正确,或者如果新密码不够长,那么它会失败,这也很好
但是,我想向用户显示为什么密码没有被更改-我如何找到不更改密码的原因?在哪里可以找到错误消息
提前谢谢。您需要在控制器级别验证其中一些密码,并手动验证,如使用简单的
确认新密码和旧密码,如果密码不匹配,则重定向\u并闪烁并出错(最好有一个小的JS脚本来评估这一点,而不是等待一个请求到达控制器,但还要将验证保存在控制器中)
对于旧密码确认,您需要使用design::Encryptor.compare(klass,hashed_password,password)
并手动引发错误,然后继续存储新密码并检查记录是否正常保存
def更新密码
旧密码=设计参数消毒液。要求(:旧密码)
新密码=设计参数消毒液。要求(:新密码)
新密码\u确认=设计参数\u消毒液。要求(:新密码\u确认)
如果新密码!=新密码确认
重定向到设置路径,警告:“新密码不匹配”
结束
if designe::Encryptor.compare(用户、当前用户、加密密码、旧密码)
重定向到设置路径,警告:“相同的旧密码错误!”
结束
如果当前用户使用密码更新(设计参数消毒器消毒(:帐户更新))
重定向到设置路径,注意:“您的密码已更新!”
其他的
重定向到设置路径,警告:person.errors.full\u messages.to\u句子
结束
结束
只是出于兴趣……为什么您自己写这篇文章,而不使用Desive提供的现有密码更改功能?