如何在Rails中使用由DeviseTokenAuth设置的标记

时间:2015-10-14 05:19:12

标签: ruby-on-rails devise

我有一个Rails网络应用程序,它使用mongoid和Devise进行用户身份验证。我想添加用于iOS应用程序的API功能,所以我添加了devise_token_auth gem(我不得不稍微调整它以使其与mongoid一起使用,但它似乎正常工作)。现在我正在寻找一些关于如何使用devise_token_auth添加到用户记录的令牌的帮助。

我正在使用ruby脚本进行测试,如下所示:

require 'httparty'

base_uri = "http://localhost:3000/api/v1/auth/sign_in"
uri = URI.parse(base_uri)

email = "test@example.com"
password = "abc123"

payload = {email: email, password: password }
response = HTTParty.post(base_uri, :body => payload)

puts "Response: #{response.message}"
puts "Response: #{response.body}"

当我执行此脚本时,会为使用电子邮件test@example.com的用户的数据库记录添加一个新字段,所以它看起来像这样:

"_id" : ObjectId("5571db594169727489000000"),
"email" : "test@example.com",
"encrypted_password" : "$2a$10$9cgGVPYuaW2Bb1y",
"name" : "Test User",
"updated_at" : ISODate("2015-10-09T20:34:09.711Z"),
"created_at" : ISODate("2015-06-05T17:24:41.734Z"),
"tokens" : {
    "J0eQp5hL8HfYvigrJOUQ" : {
        "token" : "$2a$10$xxJ84bQGH93zpMtI0W",
        "expiry" : 1445632449
    }
},
"uid" : "abcxyz"

一切都很好。响应正文包含除密码字段和令牌字段之外的所有上述用户数据。现在我从文档中无法弄清楚如何将这个新令牌用于后续的API调用。令牌信息不会在响应正文中返回。

devise_token_auth文档指出:“每个请求所需的身份验证标头将在上一个请求的响应中可用。”除了用户记录信息之外,这是我在响应中看到的内容:

@response=#<Net::HTTPOK 200 OK readbody=true>, @headers={"x-frame-options"=>["SAMEORIGIN"], "x-xss-protection"=>["1; mode=block"], "x-content-type-options"=>["nosniff"], "content-type"=>["application/json; charset=utf-8"], "etag"=>["W/\"2258296e307edb117bc9e81b83fb71a8\""], "cache-control"=>["max-age=0, private, must-revalidate"], "x-request-id"=>["26f956cd-9924-42e0-bbfa-5878a3651339"], "x-runtime"=>["0.424290"], "connection"=>["close"], "transfer-encoding"=>["chunked"]}>

如何使用该信息发出其他请求?

我的控制器代码如下所示:

class Api::V1::ApiCommentsController < ApplicationController

  include DeviseTokenAuth::Concerns::SetUserByToken
  before_action :authenticate_user!

  def index    


    render json: {
      data: {
        message: "Welcome, #{current_user.name}!"
      }
    }, status: 200

  end
end

我想用类似于上面列出的脚本进行测试,按照以下几行进行测试:

require 'httparty'

uid = "123"

base_uri = "http://localhost:3000/comments_api"
uri = URI.parse(base_uri)

payload = {"uid" => uid, "access-token" => "???" }

response = HTTParty.get(base_uri, headers: payload)

puts "Response: #{response.message}"
puts "Response: #{response.body}"

我不知道访问令牌字段应该包含什么,或者是否需要任何其他标头来验证用户。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在有效负载中,您将需要uid,access-token和client,您可以在响应头中找到这3个值: response headers