Thursday 16 May 2019

http - Accessing custom header variables in Ruby on Rails




After reading the following question (Authorization header in Ruby on Rails accessed with key HTTP_AUTHORIZATION instead of Authorization?) I have a similar problem as the OP, but the proposed answer does not seem to solve mine.



I define a custom header as such in a call to my locally hosted server (through Postman):



@Igor: I actually use Postman, so I just added the curl code to demonstrate what I did. I guess it would be better to include a screenshot:



enter image description here



And this is the code in my controller which tries to read said header:




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


However, this return nil. On the other hand, request.headers['HTTP_CUSTOM_HEADER'] returns the value. According to the question I linked to initially, I should be able to get the value through passing the name within the brackets [ ] - is this something which has been changed in newer Rails versions?



Cheers :-)




Update: It also works to access the variable in the following way: request.headers['custom-header']. So apparently it works to replace the underscore with a hyphen, which seems weird.


Answer



Yes, it has changed in Rails 4. Take a look at the Http::Headers code.



Now custom variables are always prepended with HTTP_ and _ in your variables are replaced with -, except for CGI variables.



HTH



EDIT: Just checked again, - in variables are getting replaced with _ and being prepended with HTTP_. In above link, check line number 91-94:




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

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...