Ruby On Rails 的 wrap_parameter 对签名的影响
环境
-
rails 6.0
-
ruby 2.6.5
最近的一个小项目里边,接口安全方面使用了 timestamp + sign 的方式。但是发现了两个问题:
-
Rails 的 Restful 路由把路径中的参数也加入到参数数组中了。比如 show 的路由
/posts/1
,会在 params 中加入id: 1
,导致前端加密时使用的参数和我后端拿到的参数不一致 -
Rails 的
wrap_parameter
也会在 Restful 路由中加入额外的字段
解决方案
对于第一个问题,我的做法是让前端在请求参数中也带上相应的参数,如posts/1
,就加一个id=1
的参数,这样前后端加密请求参数得到的结果就是一样的。
第二个问题,因为我没有用到wrap_parameter
,所以我直接在配置文件里边关掉了,一方面也能节省微不足道的性能
# config/initializers/wrap_paramters.rb
ActiveSupport.on_load(:action_controller) do
# wrap_parameters format: [:json]
wrap_parameters format: [] # format 设置为空即可
end
评论