我需要使用Postman记录RubyOnRails API,但我不知道如何为需要令牌的请求设置授权。我正在使用devise_token_auth gem
答案 0 :(得分:5)
当您使用devise_token_auth时,cURL的格式如下:
curl -XGET -v -H 'Content-Type: application/json' -H 'access-token: lW1c60hYkRwAinzUqgLfsQ' -H 'client: W_xCQuggzNOVeCnNZbjKFw' -H "uid: email@domain.com" http://domain/api/v1/auth/validate_token
因此您需要访问下一个参数:access-token,client,uid,url
要获得它们,您需要按照以下说明操作:
您可以将值设置为environment中的局部变量,以便在每个请求中调用它们,而不是在每个标头中粘贴它们。
如果您在完成本指南后出现授权错误
{
"errors": [
"Authorized users only."
]
}
这是因为有时访问令牌被配置为每次客户端查询API时更改,要更改此配置,只需添加以下行 配置/初始化/ devise_token_auth.rb
config.change_headers_on_each_request = false
REST API Testing - Postman behaving as different client after each request
答案 1 :(得分:2)
必须设置config.change_headers_on_each_request = false
可能并不适合所有人。
我能够让Postman自动将访问令牌,客户端和uid保存到环境变量(在我的情况下,我使用ACCESS_TOKEN,ACCESS_CLIENT和ACCESS_UID)和Postman测试脚本:
responseHeaders['access-token'] && pm.environment.set("ACCESS_TOKEN", responseHeaders['access-token']);
responseHeaders['client'] && pm.environment.set("ACCESS_CLIENT", responseHeaders['client']);
responseHeaders['uid'] && pm.environment.set("ACCESS_UID", responseHeaders['uid']);
此脚本首先进行测试以确保已返回令牌(在失败的请求中,不会返回新令牌),然后将其保存到您的环境变量中。
然后使用Pre Request脚本,将那些变量自动添加到标题中。
pm.request.headers.upsert({key: 'access-token', value: pm.variables.get("ACCESS_TOKEN") });
pm.request.headers.upsert({key: 'client', value: pm.variables.get("ACCESS_CLIENT") });
pm.request.headers.upsert({key: 'uid', value: pm.variables.get("ACCESS_UID") });
我将这些添加到集合中,而不是邮递员中的每个特定请求:
Collection Edit screen, Pre-request Scripts tab
Collection Edit screen, Tests tab
然后,在我开始发出请求之前,我要做的就是发出一个登录请求以获取初始令牌(由于我们的测试脚本,该令牌将得到保存)。此后的每个成功请求都将自动保存并使用最新令牌,从而使您可以测试API,而无需修改Rails应用程序内的配置设置。
希望这可以帮助发现此问题的任何人。
答案 2 :(得分:0)
当您使用devise_auth_gem时,您必须设置可以作为您的电子邮件的uid,当您使用正确的凭据登录时,您将获得一个响应,其中客户端,access_token和uid以及其他数据存储在哪里数据库。因此,如果您请求和需要logged_in用户的控制器的新操作,您必须从与db匹配的标头传递这些客户端,access_token和uid,然后您被授权使用该方法。如果请求成功,您将收到响应,其中包含新的access_token。因此,如果您必须调用另一个操作,则必须每次都将新的access_token与客户端和uid一起传递。并且客户端对于一次登录是相同的。如果您重新登录,您将获得另一个客户。