环境
- 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