我正在使用试剂和组合物来制作玩具 web 应用程序,但我无法弄清楚为什么我的服务器没有发送 CSRF cookie。其他答案和几篇博客文章似乎暗示 compojure 的默认设置现在发送 CSRF 令牌,并且手动重新发送它实际上是一个错误。当我尝试点击 POST/art
端点时,我得到了 403 Forbidden 响应。所有页面都没有获得带有 CSRF 令牌的 cookie,因此我无法通过 POST 请求发送它。有什么建议吗?
;;server.clj
(ns my-app.server
(:require [my-app.handler :refer [app]]
[environ.core :refer [env]]
[ring.adapter.jetty :refer [run-jetty]])
(:gen-class))
(defn -main [& args]
(let [port (Integer/parseInt (or (env :port) "3000"))]
(run-jetty app {:port port :join? false})))
;; handler.clj
(ns my-app.handler
(:require [compojure.core :refer [GET POST defroutes]]
[compojure.route :refer [not-found resources]]
[hiccup.page :refer [include-js include-css html5]]
[my-app.middleware :refer [wrap-middleware]]
[environ.core :refer [env]]))
(defroutes routes
(GET "/" [] loading-page)
(GET "/about" [] loading-page)
(GET "/art" [] loading-page)
(POST "/art" request {:sent (:body request) :hello "world"})
(resources "/")
(not-found "Not Found"))
(def app (wrap-middleware #'routes))
;;middleware.clj
(ns stagistry.middleware
(:require [ring.middleware.defaults :refer [site-defaults wrap-defaults]]
[prone.middleware :refer [wrap-exceptions]]
[ring.middleware.reload :refer [wrap-reload]]))
(defn wrap-middleware [handler]
(-> handler
(wrap-defaults site-defaults)
wrap-exceptions
wrap-reload))
我在这里将代码本身扔到了 github 上,因为我仍然看不出有什么问题。