Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道&x2B;设计:如果密码未更改,如何获取错误消息?_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 轨道&x2B;设计:如果密码未更改,如何获取错误消息?

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

我正在使用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: "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提供的现有密码更改功能?