Я написал clojure webapp, который очень похож на пример webapp, заданный as the friend exmaple. У меня написано небольшое испытание, используя ring-mock
, чтобы проверить, работает ли проверка подлинности . Написав этот тест, я нашел какое-то поведение, которого я не понимаю.Compojure и Friend, где находится состояние в этом примере
См. Следующий код в качестве примера.
(let [route "/login"
login-post (body (request :post route)
{"username" "Username" "password" "Password"})]
(println (secured-app login-post))
(println (secured-app login-post)))
Первый println
возвращает правильный результат:
{:status 303,
:headers
{"Set-Cookie"
("ring-session=ENCRYPTED-STUFF;Path=/"),
"Location" "/"},
:body ""}
Но второй один возвращает ошибку входа в систему:
{:status 302,
:headers
{"Location" "http://localhost/login?&login_failed=Y&username="},
:body ""}
Где-то в этом коде есть состояние быть «передано» от первый запрос обрабатывается вторым запросом (secured-app login-post)
, но я не вижу его.
Когда я, например, запустить это заявление:
(println (secured-app(body (request :post "/login")
{"username" "Username" "password" "Password"})))
в несколько раз Repl, я всегда получаю первый должный результат.
Откуда взялось это поведение, и где это государство в этом примере?
Я сделал небольшую библиотеку для хранения/воссоздания запросов, в комплекте с телом запроса, являющимся потоком, который ожидает кольцо: https://github.com/noisesmith/groundhog Он может быть добавлен как обработчик звонка, который захватывает запросы поскольку они входят – noisesmith