ruby-on-rails 在Ruby on Rails中访问自定义标头变量

p4tfgftt  于 2023-02-20  发布在  Ruby
关注(0)|答案(2)|浏览(200)

在阅读了下面的问题(Authorization header in Ruby on Rails accessed with key HTTP_AUTHORIZATION instead of Authorization?)后,我有一个与OP类似的问题,但提出的答案似乎并没有解决我的问题。
我在调用本地托管服务器(通过Postman)时定义了一个自定义头:
@Igor:其实我用的是Postman,所以我只是加了curl代码来演示一下我做了什么,我想最好再加个截图:

这是我的控制器中的代码,它试图读取上述标题:

def authenticate_through_header
  custom_header_value = request.headers['custom_header']
end

但是,这个函数返回nil,另一方面,request.headers['HTTP_CUSTOM_HEADER']返回值,根据我最初链接到的问题,我应该能够通过在括号[]中传递名称来获得值--这在新的Rails版本中是否有所改变?
干杯:-)

  • 更新 *:它也可以通过以下方式访问变量:request.headers['custom-header']。所以显然用连字符替换下划线是有效的,这看起来很奇怪。
q8l4jmvw

q8l4jmvw1#

是的,它在Rails 4 . Take a look at the Http::Headers code中发生了变化。
现在,自定义变量总是以HTTP_为前缀,并且变量中的_将替换为-CGI variables除外。
高温加热
编辑:刚刚再次检查,变量中的-被替换为_,并被前置HTTP_。在上面的链接中,检查line number 91-94

key = key.upcase.tr('-', '_')
tag5nh1u

tag5nh1u2#

答案是正确的,但我想我应该给那些在这方面挣扎的人加一个注解。
如果将binding.pry插入Rails控制器,则可以使用

request.headers.to_h

这将为你提供一个完整的头文件列表,这将使你更容易追踪到,例如,你的头文件authentication_token已经被翻译成HTTP_AUTHENTICATION_TOKEN

相关问题