【问题标题】:API JSON Response serialize to throw custom messageAPI JSON 响应序列化以抛出自定义消息
【发布时间】:2019-03-26 05:32:48
【问题描述】:

我正在使用 devise token auth gem 和活动模型序列化器进行身份验证,它会发送类似的响应

{

  "status": "Success",

  "message": "User Created Successfully",

  "data": {

    "id": 9,

    "tokens": {

      "cUZCQrKCPQCijIjCWZI4mA": {

        "token": "$2a$10$9/ZKX7KmH4sLLdp19R331.E9BLInpnXCkJCX0xffJSHpTsu0/X.UK",

        "expiry": 1554720926

      }

    }

  }

}

但我主要希望得到类似的东西:-

{

  "status": "Success",

  "message": "User Created Successfully",

  "data": {

    "id": 9,

    "token": "$2a$10$9/ZKX7KmH4sLLdp19R331.E9BLInpnXCkJCX0xffJSHpTsu0/X.UK"

  }

}

我尝试使用 JSON Parse ,尝试获取最后一个令牌,但由于名称未知,因为它是随机生成的,所以我无法这样做。 我怎样才能实现这一目标?

编辑:- 用户序列化器:-

class UserSerializer < ActiveModel::Serializer
  attributes :id, :tokens
end

【问题讨论】:

  • 您能否将您的用户序列化程序代码添加到您的问题中?
  • 使用用户序列化程序编辑了帖子。这是返回给定结果的基本内容。我已经回到原来的状态,直到我得到解决方案

标签: ruby-on-rails json active-model-serializers devise-token-auth


【解决方案1】:

感谢您发布代码。你能试试这个吗?

class UserSerializer < ActiveModel::Serializer
  attributes :id, :token

  def token
    tokens = DeviseTokenAuth::TokensSerialization.load(object.tokens) # This gives you a hash
    tokens['YOURCLIENTID']['token']
  end
end

更新

您需要 clientid,它是哈希的关键。 此外,gem 使用 JSON.generate 生成令牌。所以你可以deserialize using load

我希望这会有所帮助!

【讨论】:

  • 不返回{ "status": "Success", "message": "Successfully Logged In.", "data": { "id": 24 } }
  • 是的,现在它回来了。令牌:空
  • 实际上我认为正在发生的是,它作为字符串存储到数据库中:tokens 因此活动模型序列化程序返回令牌字符串而不是令牌,我正在考虑一种可能的方法来获取可能在资源保存到数据库之前的令牌?
  • 客户端 ID 是从设计令牌身份验证 gem 中随机生成的,并且在每个请求中都是一个变量。如何使用反序列化获取变量客户端 ID?
猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2020-09-09
  • 2018-06-03
  • 2012-02-16
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多