如何使用devise_auth_token为请求配置Postman

时间:2018-06-14 03:48:24

标签: ruby-on-rails postman

我需要使用Postman记录RubyOnRails API,但我不知道如何为需要令牌的请求设置授权。我正在使用devise_token_auth gem

3 个答案:

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

要获得它们,您需要按照以下说明操作:

  • 使用针对您的注册请求的POST请求创建新用户,在这种情况下为http://localhost:3000/auth,在正文中使用 RAW 格式设置您需要的参数创建新用户(如示例中所示)并单击“发送”。

enter image description here

  • 现在您收到了请求的回复,您需要的参数位于请求标题中,点击标题标签即可查看。

enter image description here

  • 然后在Postman中使用需要授权的GET创建新请求,并在标题中设置值访问令牌客户端 uid 来自最后一次请求的标题。

enter image description here

您可以将值设置为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一起传递。并且客户端对于一次登录是相同的。如果您重新登录,您将获得另一个客户。