Rswag中Authorization header出现在查询参数的问题求助
环境版本
- rswag (2.0.5)
- rspec (3.8.0)
- Rails 5.2.3
- Ruby 2.4.5
问题背景
我第一次用Rswag配置JWT认证时,卡在了Authorization header的设置上,折腾了整整一天。我的操作步骤是这样的:
- 在
spec/swagger_helper.rb里配置swagger文档,定义了JWT类型的securityDefinitions,指定Authorization放在请求头里; - 在
spec/integration/api/v1/nodes_spec.rb中编写/api/v1/nodes的GET接口测试,配置了security规则、查询参数,响应部分也设置了Authorization为Bearer格式的JWT。
预期vs实际结果
- 预期:Bearer令牌被正确放入Authorization请求头中
- 实际:查看测试日志发现,Authorization和Accept头竟然被放到了查询参数里!这导致后端代码无法从请求头获取JWT,直接报错
No JWT token included in request。后来尝试直接定义header类型的Authorization参数,依然没用。
排查过程
一开始我以为是Rswag的配置问题,反复核对了swagger_helper和测试文件的写法都没问题。后来我新建了一个只包含rspec和rswag的Rails 5 API项目测试,结果完全正常,这说明问题大概率出在现有项目的gem冲突或者额外配置上。
经过逐一排查,我发现罪魁祸首是引入了Rack::Test::Methods!
解决方案
移除测试helper文件中(比如spec/support/xxx_helper.rb或者直接在测试文件里)的include Rack::Test::Methods语句,问题直接解决,Authorization头终于能正常出现在请求头里了。
内容的提问来源于stack exchange,提问作者JohnZhang
相关产品推荐
相关产品推荐

