【发布时间】:2013-12-11 14:20:46
【问题描述】:
我写了一个很像的clojure webapp
给出as the friend exmaple 的示例webapp。我有
使用ring-mock 写了一个小测试来测试是否认证
工作正常。写这个测试我发现了一些我不理解的行为。
以下代码为例。
(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中,我总是得到第一个正确的结果。
此行为从何而来,在此示例中处理的状态在哪里?
【问题讨论】:
-
我创建了一个小库来存储/重新创建请求,请求的主体是环所期望的流:github.com/noisesmith/groundhog 它可以添加为环处理程序,在请求到来时捕获请求在