Ruby On Rails 的 wrap_parameter 对签名的影响

环境

  • rails 6.0

  • ruby 2.6.5

最近的一个小项目里边,接口安全方面使用了 timestamp + sign 的方式。但是发现了两个问题:

  1. Rails 的 Restful 路由把路径中的参数也加入到参数数组中了。比如 show 的路由/posts/1,会在 params 中加入id: 1,导致前端加密时使用的参数和我后端拿到的参数不一致

  2. 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

评论