在阅读了下面的问题(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']
。所以显然用连字符替换下划线是有效的,这看起来很奇怪。
2条答案
按热度按时间q8l4jmvw1#
是的,它在
Rails 4
. Take a look at the Http::Headers code中发生了变化。现在,自定义变量总是以
HTTP_
为前缀,并且变量中的_
将替换为-
,CGI variables除外。高温加热
编辑:刚刚再次检查,变量中的
-
被替换为_
,并被前置HTTP_
。在上面的链接中,检查line number 91-94
:tag5nh1u2#
答案是正确的,但我想我应该给那些在这方面挣扎的人加一个注解。
如果将
binding.pry
插入Rails控制器,则可以使用这将为你提供一个完整的头文件列表,这将使你更容易追踪到,例如,你的头文件
authentication_token
已经被翻译成HTTP_AUTHENTICATION_TOKEN
。