Rails 5设置授权标头

时间:2016-03-25 10:35:42

标签: ruby-on-rails jwt ruby-on-rails-5

我获得了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标头的推荐方法是什么?

1 个答案:

答案 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}"