【问题标题】:Strong parameters only for update/create or for all actions仅用于更新/创建或所有操作的强参数
【发布时间】:2016-02-08 19:04:26
【问题描述】:

strong parameters 需要的嵌套格式自动随表单一起提供,即 updatecreate 操作。

这是否意味着它仅适用于这些操作,而对于其他获取请求,我们应该在控制器中使用普通的旧 params[:token]

我问的原因是要了解我是否应该为像这样的获取请求创建嵌套格式link_to user.first_name, user_path(user: {token: user.token}) 或干脆做link_to user.first_name, user_path(token: user.token)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 strong-parameters


    【解决方案1】:

    强参数是一种安全机制,仅与添加或更改数据的操作有关,特别是同时对多个属性执行此操作的操作,因此称为批量分配。通常使用批量分配的典型控制器方法是创建和更新,因此这些通常是唯一需要保护的方法。我说通常是因为您始终可以拥有使用质量分配的自定义控制器方法。

    批量分配如下所示:

    attrs = {:first => "John", :last => "Doe", :email => "john.doe@example.com"}
    user = User.new(attrs)
    

    您现在有一个分配了所有这些属性的用户,这是一件很方便的事情。否则,您将不得不手动执行每个属性。问题是,如果您没有将可以通过强参数分配的属性列入白名单,那么有人可能会操纵 POST 或 PUT/PATCH 请求说出类似 :admin => true 的内容

    希望这样可以更清楚一点。

    【讨论】:

      【解决方案2】:

      Strong Parameters 提供一个接口,用于保护属性免受最终用户分配的影响。 Strong Parameters Action Controller 参数在被列入白名单之前禁止在 Active Model mass assignments 中使用。这意味着您必须有意识地选择允许大规模更新的属性,从而防止意外暴露不应该暴露的属性。

      因此,这适用于createupdate 操作,因为您正在更新这两种操作的属性。在GET 请求中,您不会更新任何属性。因此,这些请求中不需要强参数。

      【讨论】:

        【解决方案3】:

        简而言之,我们需要对所有POST & PATCH(PUT) 方法操作使用强参数进行验证和更新。

        【讨论】:

          猜你喜欢
          • 2011-04-20
          • 2015-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-24
          • 1970-01-01
          相关资源
          最近更新 更多