Ruby on rails 使用授权头获取请求(将Rails-4.2升级到Rails-5.1)
因此,我们正在将Rails应用程序从Rails 4.2升级到Rails 5.1。一切顺利,直到我不得不升级我们的测试。我们有一个oauth_规范文件,用于检查我们的身份验证过程是否一切正常 我目前正在修改Rspec语法,这样一切都可以正常工作,但我真的被我们的一个测试卡住了。它不断地返回给我,我想我已经阅读了StackOverflow上的所有相关内容 下面是我们在4.2中的测试: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
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'
,有什么具体原因吗?