使用授权标头获取GET请求(将Rails-4.2升级到Rails-5.1)

时间:2018-02-14 10:16:17

标签: ruby-on-rails rspec ruby-on-rails-5 doorkeeper

因此我们将Rails应用程序从Rails 4.2升级到Rails 5.1。一切顺利,直到我必须升级我们的测试。我们有一个oauth_spec文件,用于检查我们的Auth进程是否正常。

我目前正在更改Rspec语法,所以一切正常,但我确实坚持我们的一个测试。它一直让我回复401-未经授权,我想我已经阅读了StackOverflow上可以找到的所有内容。

这是我们的测试在4.2中的样子:

$('.mybtn').on('click', function (e) {
    e.preventDefault(); // This prevent the hyperlink from reloading the page.
    $('.mybtn-active').removeClass('mybtn-active');
    $(this).addClass('mybtn-active');
});

这就是我到目前为止所得到的:

it "grants access to a user's data when he sets an Authentication token as a request parameter" do
  data =
  {
    "grant_type" => "password",
    "password" => password,
    "username" => user.email
  }
  post('/oauth/token', data, {'HTTP_ACCEPT' => "application/json"})
  token = json["access_token"]
  get('/users/me', data, {'HTTP_ACCEPT' => "application/json", "Authorization" => "Bearer #{token}"})

  expect(response).to have_http_status(200)
  expect(json["email"]).to eq(user.email)
end

第一个帖子请求工作正常,并给我我的持票人。但接下来的一次休息我总是得到:

  

失败/错误:期望(响应).to have_http_status(200)期望响应的状态代码为200,但它是401

有没有人知道我能做些什么让这项工作?

1 个答案:

答案 0 :(得分:1)

您的原始代码:

get('/users/me', data, {'HTTP_ACCEPT' => "application/json", "Authorization" => "Bearer #{token}"})

您的新代码:

header = {"Authorization": "Bearer #{token}", "Accept": "application/json"}
request.headers.merge!(header)
get '/users/me'

在原始代码中,您将data(用户名和密码)作为参数传递,而在Rails 5代码中,您不再传递该数据。 可能是401错误的一个原因,但鉴于规范标题,我认为不是。

我建议你这样做:

get '/users/me', headers: {"Authorization": "Bearer #{token}", "Accept": "application/json"}