我获得了JSON Web Token登录,但我正在修复我的Rails 5 Controller测试。
我正在尝试将我的JWT身份验证令牌传递给我的GET请求标头。
到目前为止,在我的用户控制器测试中,我有这个测试:
test "users should return list of users" do
User.create(@bob)
auth_token = log_in_as(@bob)
request.headers['Authorization'] = "JWT #{auth_token}"
get users_path
assert_response :success
assert_not response.body.empty?
end
到目前为止还没有成功,我得到回复not authenticated
。
如果我将其更改为:
test "users should return list of users" do
User.create(@bob)
auth_token = log_in_as(@bob)
get users_path, nil, { HTTP_AUTHORIZATION: "JWT #{auth_token}" }
puts "response = #{response.body}"
assert_response :success
assert_not response.body.empty?
end
我得到了这个预期的回应:
response = {"users":[{"id":298486374,"name":"MyString","email":"MyString","cats":[]},{"id":980190962,"name":"MyString","email":"MyString","cats":[]},{"id":980190963,"name":"Bob","email":"bob@gmail.com","cats":[]}]}
但我也得到了弃权警告:
DEPRECATION WARNING:ActionDispatch :: IntegrationTest HTTP请求 方法将来只接受以下关键字参数 Rails版本:params,headers,env,xhr
示例:
get' / profile',params:{id:1},标题:{' X-Extra-Header' => ' 123' },env:{' action_dispatch.custom' => '自定义' },xhr:true
那么在Rails 5中设置HTTP Authorization标头的推荐方法是什么?
答案 0 :(得分:3)
您需要在参数see here中包含params和headers键。
get users_path, params: {}, headers: { HTTP_AUTHORIZATION: "JWT #{auth_token}" }
您的第一个示例可能无法正常工作,因为您在授权时设置JWT而不是HTTP_AUTHORIZATION。
request.headers['HTTP_AUTHORIZATION'] = "JWT #{auth_token}"