Ruby on rails 使用授权头获取请求(将Rails-4.2升级到Rails-5.1)

Ruby on rails 使用授权头获取请求(将Rails-4.2升级到Rails-5.1),ruby-on-rails,rspec,ruby-on-rails-5,doorkeeper,Ruby On Rails,Rspec,Ruby On Rails 5,Doorkeeper,因此,我们正在将Rails应用程序从Rails 4.2升级到Rails 5.1。一切顺利,直到我不得不升级我们的测试。我们有一个oauth_规范文件,用于检查我们的身份验证过程是否一切正常 我目前正在修改Rspec语法,这样一切都可以正常工作,但我真的被我们的一个测试卡住了。它不断地返回给我,我想我已经阅读了StackOverflow上的所有相关内容 下面是我们在4.2中的测试: it "grants access to a user's data when he sets an Authent

因此,我们正在将Rails应用程序从Rails 4.2升级到Rails 5.1。一切顺利,直到我不得不升级我们的测试。我们有一个oauth_规范文件,用于检查我们的身份验证过程是否一切正常

我目前正在修改Rspec语法,这样一切都可以正常工作,但我真的被我们的一个测试卡住了。它不断地返回给我,我想我已经阅读了StackOverflow上的所有相关内容

下面是我们在4.2中的测试:

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
到目前为止,我得到的是:

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", params: data
  token = json["access_token"]

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

  expect(response).to have_http_status(200)
  expect(json["email"]).to eq(user.email)
end
第一个邮件请求很好,请给我我的持有人。但下一次休息,我总是得到:

失败/错误:expect(response)。要获得\u http\u状态(200),该响应的状态代码为200,但为401

有人知道我能做些什么来实现这一点吗?

您的原始代码:

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'
在原始代码中,您传递了
数据
,即用户名和密码作为参数,而在Rails 5代码中,您不再传递该数据。这可能是401错误的一个原因,但鉴于规范标题,我不认为是这样

我建议您只需:

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

您将语法从
get('/users/me',data,{'HTTP_ACCEPT'=>“application/json”,“Authorization”=>“Bearer”{token}}})更改为手动向
请求
对象添加头,然后将
get'/users/me'
,有什么具体原因吗?