Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 允许用户在Desive中更新其密码而不使用当前密码_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 允许用户在Desive中更新其密码而不使用当前密码

Ruby on rails 允许用户在Desive中更新其密码而不使用当前密码,ruby-on-rails,devise,Ruby On Rails,Devise,我在轨道4.2.1和设计3.4.1。我基本上同时想要两样东西: 及 我设法让他们分开工作。但第一个问题的解决方案1恐怕与第二个问题的唯一官方解决方案不兼容,因为对于后者,我需要覆盖注册控制器 因此,我尝试在注册控制器中执行解决方案1作业,而不是在应用程序中执行: 类用户::注册控制器

我在轨道4.2.1和设计3.4.1。我基本上同时想要两样东西:

我设法让他们分开工作。但第一个问题的解决方案1恐怕与第二个问题的唯一官方解决方案不兼容,因为对于后者,我需要覆盖注册控制器

因此,我尝试在注册控制器中执行解决方案1作业,而不是在应用程序中执行:

类用户::注册控制器<设计::注册控制器
在\u筛选器之前:配置\u帐户\u更新\u参数,仅:[:更新]
受保护的
def配置\帐户\更新\参数
为(:帐户更新){u许可证(:名称,:密码,:密码确认,:当前密码)}
结束
def更新_资源(资源,参数)
资源。在不使用密码的情况下更新\u(参数)
结束
结束
这样,在完全过滤掉密码的同时,只会更新添加的属性,如name。
对于这样一个简单的目标,我不确定是否应该像解决方案2和3那样开始大规模定制。。我遗漏了什么吗

在挖掘设计代码后,我发现故意删除了
:password
:password\u confirmation
参数。出于安全原因,默认情况下会执行此操作


因此(可能有风险)的解决方案是在我的资源模型中覆盖更新,不使用密码,但不删除密码*params

将此添加到您的
注册\u控制器中

def update_resource(resource, params)
  resource.update_without_password(params)
end
并在您的用户模型或使用Desive的模型上使用我们的密码覆盖更新方法:

def update_without_password(params, *options)
  if params[:password].blank?
    params.delete(:password)
    params.delete(:password_confirmation) if params[:password_confirmation].blank?
  end

  result = update_attributes(params, *options)
  clean_up_passwords
  result
end


官方文件/代码-

这对我也有帮助。我不确定在覆盖不带密码的update_时不删除密码参数是否有任何危害,除非当我实际需要使用不带密码的update_更新任何其他不带密码的帐户详细信息时,可能会出现问题。思想?
def update_without_password(params, *options)
  if params[:password].blank?
    params.delete(:password)
    params.delete(:password_confirmation) if params[:password_confirmation].blank?
  end

  result = update_attributes(params, *options)
  clean_up_passwords
  result
end