Rails 5设置授权头

4

我已经实现了 JSON Web Token 登录,但正在修复我的 Rails 5 控制器测试。

我试图将我的 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

到目前为止,它还没有起作用,我收到了“未经认证”的响应。

如果我像这样更改它:

 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 },headers:{ 'X-Extra-Header' => '123' },env:{ 'action_dispatch.custom' => 'custom' },xhr:true 那么,在Rails 5中设置HTTP授权标头的推荐方法是什么?
1个回答

4

您需要在参数中包含params和headers键请参见此处

get users_path, params: {}, headers: { HTTP_AUTHORIZATION: "JWT #{auth_token}" }

你的第一个例子可能无法正常工作,因为你将JWT设置在了Authorization上而不是HTTP_AUTHORIZATION上。
 request.headers['HTTP_AUTHORIZATION'] = "JWT #{auth_token}"   

1
使用 request.headers['HTTP_AUTHORIZATION'] = "JWT #{auth_token}" 也不起作用。但是 headers: { ... } 方法可以正常工作。 - Zhang
在我的请求测试中,使用:headers关键参数是有效的,但在我的控制器测试中,我必须修改request.headers才能使其工作。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接