Аутентификация с использованием заголовков в Синатре - PullRequest
0 голосов
/ 21 декабря 2018

Как я могу сравнить заголовки в sinatra и остановить код / ​​скрипт, если один из заголовков не совпадает?

Допустим, у меня есть заголовок с именем TOKEN: 666 Я хочу сравнить любой выполняемый запросСинатра и проверить «TOKEN», если существует и равен «666», затем перейти к коду, если не просто вернуть 401.

1 Ответ

0 голосов
/ 21 декабря 2018

Ответ прост:

По умолчанию Sinatra прослушивает порт 4567, поэтому я просто удостоверился, что он привязан ко всем интерфейсам на всякий случай, если я хочу вызвать его со своего внешнего IP-адреса, и отключил всевывод многословной ошибки следующим образом:

listener.rb

require "sinatra"

set :bind, "0.0.0.0"
disable :show_exceptions
disable :raise_errors

post "/" do

  # Check if the header matches
  # If it did not match then halt and return code 401 Unauthorized

  if request.env["HTTP_custom_header_name"] != "verystrongpassword"
    halt 401
  end

  #the rest of your code goes here

  status :ok

end

Обратите внимание, что при сравнении значения заголовка всегда необходимо включать HTTP , а затемидет имя вашего заголовка - Ссылка

Пример

require "sinatra"

set :bind, "0.0.0.0"
disable :show_exceptions
disable :raise_errors

post "/" do

  # Check if the header matches
  # If it did not match then halt and return code 401 Unauthorized

  if request.env["HTTP_X_GIT_SECRET"] != "d4c74594d841139328695756648b6bd6"
    halt 401
  end

  data = JSON.parse request.body.read
  p data

  status :ok

end

Где X_GIT_SECRET это имя заголовка

Extra

если вы не знаете, как называется заголовок, отправляемый в sinatra, вы можете проверить все содержимое запроса, поставив следующее перед оператором if up:

p request.env

, а затем попробуйте отправить запрос еще раз, найдите свой заголовок и проведите сравнение на его основе.

Примечание: status :ok aka 200 OK, было установлено в конце блока, потому что, когда кто-то отправляет запрос to Синатра должна что-то возвращать, иначе возникнет внутренняя ошибка 500.

...