dav*_*idb 12 ruby-on-rails strong-parameters ruby-on-rails-4.2
强参数问题严重.它在我的大约200个动作中工作得很好,但在一个它没有,因为我在那里使用参数非常动态,我也因为应用程序设计而无法改变它.
所以我想在这个特定的操作中禁用强参数验证.有没有办法做到这一点?
Rit*_*hie 15
强参数会覆盖该params方法ActionController::Base.您可以简单地覆盖它并将其重新设置为您自己想要的.
所以这:
class MyController < ApplicationController
def params
request.parameters
end
end
Run Code Online (Sandbox Code Playgroud)
将有效地禁用控制器中所有操作的强参数.你只想为特定的动作禁用它,所以你可以这样做:
class MyController < ApplicationController
before_action :use_unsafe_params, only: [:particular_action]
def params
@_dangerous_params || super
end
def particular_action
# My params is unsafe
end
def normal_action
# my params is safe
end
private
def use_unsafe_params
@_dangerous_params = request.parameters
end
end
Run Code Online (Sandbox Code Playgroud)
不太确定这是否是最佳实践,但对于 Rails 5,我只是使用request.params而不是params任何我想跳过强参数的时候。
所以而不是像这样:
post = Post.new(params[:post])
Run Code Online (Sandbox Code Playgroud)
我用:
post = Post.new(request.params[:post])
Run Code Online (Sandbox Code Playgroud)
您可以使用.permit!将哈希中的任何键列入白名单。
params.require(:something).permit!
Run Code Online (Sandbox Code Playgroud)
然而,这应该被视为极端的代码味道和安全风险。
可以使用此技巧将嵌套哈希列入白名单:
params.require(:product).permit(:name, data: params[:product][:data].try(:keys))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |