"api1/users", "action"=>"create"} 什么-6ren">
gpt4 book ai didi

ruby-on-rails - sanitizer 输入

转载 作者:行者123 更新时间:2023-12-04 18:19:12 26 4
gpt4 key购买 nike

这可能是一个非常n00b的问题,但是如果您的参数列表包含一堆不可访问的属性,即

params = {"controller"=>"api1/users", "action"=>"create"}

什么是“清理”你的参数的最佳方法,以便它们只包含可访问的属性。我目前想到的当前方法是:
User._accessible_attributes[:default].entries

这给了我一个可访问属性的列表,然后只传递这些参数:
["", "email", "password", "fb_token", "fb_id", "fb_name", "first_name", "last_name", "gender"

另一种可能的方法是:
  def clean_params #ANTIPATTERN
params.delete(:controller)
params.delete(:action)
end

但这也感觉像是一种反模式......

我知道您应该执行类似 params[:user] 的操作来仅获取可访问的参数,但因为这是一个 API,所以能够仅在 url 中传递东西会很好。

谢谢!

最佳答案

Rails 参数包装器会自动为您执行此操作。也就是说,它将接受顶级参数并将它们分组,例如,:user为了您的方便,过滤掉用户模型无法访问的任何内容。它在内部使用 accessible_attributes ,类似于您所做的。使用您的 API 的人不需要对属性进行分组——rails 会在将参数交给您的 Controller 操作之前完成。

默认情况下,它对 JSON 请求打开,但您可以通过编辑 initializers/wrap_parameters.rb 来扩展它。 .或者您可以使用 wrap_parameters method 在每个 Controller 的基础上调整行为。在您的 Controller 中。

参数清理的 rails 方案可能会在 4.0 中发生变化,从模型转向 Controller 。您可能想观看 strong_parameters gem 的发展这可能是对即将发生的事情的预览。

关于ruby-on-rails - sanitizer 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com