【问题标题】:Is there any way to move Devise's headers response to body?有什么方法可以将 Devise 的标题响应移动到正文?
【发布时间】:2017-02-10 23:48:24
【问题描述】:

在我的 Rails-api 应用程序中,我使用的是 Devise gem,它在进行身份验证时会在标头中返回所有关键信息(访问令牌、UID、客户端等),如下所示:

Access-Token →DIbgreortZbCYKqzC8HdNg
Client →Y6J5oTIqS7Gc_-h9xynBQ
Uid →email2@example.com

我希望那些在响应正文中。有什么方法可以实现吗?

【问题讨论】:

  • 你找到解决办法了吗?

标签: ruby-on-rails ruby http devise


【解决方案1】:

Rails 为您提供了一个请求对象,因此您可以从控制器的标头中获取您需要的任何内容。

def some_action
     @mime_type = request.headers["Content-Type"] # => "text/plain"
     @token = request.headers["key-for-your-token-here"]
end

然后,您可以将其传递给您的视图,也可以通过 request.body 将其插入响应正文中,就像将任何键/值对插入哈希中一样。

在此处找到 ActionDispatch::Request 的文档: http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-headers

更新:

创建一个自定义方法,看看它需要运行多长时间才能导航标头哈希。如果很长时间,您可以使用它来找到您要查找的内容的确切嵌套并更改它。

def find_token(parent, request.headers)
  request.headers.each {|key, value|
    if value.is_a?(Hash) 
       find_token(key, value)
    elsif key == 'THE TOKEN KEY HERE'
       return value
    else
      next
    end 
  }
end

【讨论】:

  • 当我执行request.headers["access-token"] 时,它会返回nil,但request.headers["Content-Type"] 的输出是正确的
  • 这意味着您没有得到正确的密钥。密钥本身也可以嵌套。在控制器中为 request.headers 添加 puts 语句并将其粘贴到您的问题中,以便我们查看。
  • 输出看起来像这样。无法以任何方式访问令牌pp.vk.me/c638121/v638121746/239b4/PF4NFzGBTio.jpg
  • 好的,现在最困难的部分是找到它的嵌套深度。至少它是@header[:access_token] 但是如果这不起作用,你必须找出它里面有多少个哈希/数组,然后基本上按照你的方式去解决它。例如它可能是 response[:something][:another_array][:another_hash][:header][:access_token]
  • 没有办法知道它的嵌套有多深。花了 1.5 小时
猜你喜欢
  • 2019-09-21
  • 1970-01-01
  • 2016-05-07
  • 2015-09-25
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多