У меня есть простое приложение Sinatra, с которым я играю, и по какой-то причине файлы cookie не работают на определенных маршрутах, что я нахожу довольно странным.
require "sinatra"
set(:authenticate) do |*vars|
condition do
unless request.cookies.has_key?("TestCookie")
redirect to("/login"), 303
end
end
end
get "/login" do
return "No valid cookie"
end
get "/secret", :authenticate => [:auth_cookie] do
cookie = request.cookies["TestCookie"]
return "Secrets ahoy - #{cookie}"
end
get '/cookie/set' do
response.set_cookie("TestCookie", {
:expires => Time.now + 2400,
:value => "TestValue"
})
return "Cookie is set"
end
get '/cookie/get' do
cookie = request.cookies["TestCookie"]
return "Cookie with value #{cookie}"
end
Если я зайду вcookie / установить его правильно, устанавливает cookie (можно увидеть в firecookie), затем, если я перехожу к cookie / get, я получаю правильный вывод cookie.Однако, если я захожу в / secret, он всегда перенаправляется в / login.Поскольку я все еще плохо знаком с синтаксисом Ruby, я подумал, что это может быть проблема с моим состоянием в расширении authenticate, поэтому я попытался удалить его и просто выплевывать cookie, как это делает другой.Тем не менее, все еще ничего, так что я в растерянности относительно того, почему там cookie, я вижу его в браузере ... и / cookies / get работает, но / secret не ...
Я что-то здесь упускаю?