Reagent + Ring 全栈 Clojure + ClojureScript 应用程序收到 403 `无效的防伪令牌`

问题描述 投票:0回答:1

我正在尝试建立一个完整的 Clojure 和 ClojureScript Web 应用程序。我正在使用 Reagent 和 Ring,但当我尝试使用 promesa 发布数据时遇到 403 错误。

在 ClojureScript 端,我有以下页面,它尝试发布数据并等待响应。

(defn trigger-page []
  (let [do-the-thing (fn []
                        (promesa/let [_response (js/fetch "api/trigger/" (clj->js {:headers {:Content-Type "application/json"}
                                                                              :method "POST"
                                                                              :body (js/JSON.stringify #js {:args "TEST"})}))
                                response (.json _response)
                                data (js->clj response :keywordize-keys true)]
                          (js/console.log response)
                          data))]
  (fn []
    [:span.main
     (js/console.log "test")
     [:h1 "Trigger"]
     [:button {:on-click #(do-the-thing)} "Trigger"]
     [:ul]])))

在 Clojure 后端,我的应用程序和支持功能定义如下:

(defn do-the-stuff [req]
  (r/response {:response "STUFF"}))

(def app
  (reitit-ring/ring-handler
   (reitit-ring/router
    [["/" {:get {:handler index-handler}}]
     ["/trigger" {:get {:handler index-handler}}]
     ["api/"
      ["trigger/" {:post do-the-stuff}]]
     ["/about" {:get {:handler index-handler}}]])
   (reitit-ring/routes
    (reitit-ring/create-resource-handler {:path "/" :root "/public"})
    (reitit-ring/create-default-handler))
   {:middleware middleware}))

中间件是leiningen试剂模板默认创建的:

(def middleware
  [#(wrap-defaults % site-defaults)
   wrap-exceptions
   wrap-reload])

目前,每当我按下触发按钮时,我都会收到 403

Invalid anti-forgery token
响应。我尝试过使用 ring-clojure/ring-anti-forgery 但没有成功。非常感谢任何建议!

clojure clojurescript ring reagent reitit
1个回答
0
投票

更新以解决此问题,在

do-the-stuff
中,我从 (ring/response {:response "STUFF"}) 更改为仅返回 {:response "STUFF"}。这解决了我无效的防伪令牌问题。

© www.soinside.com 2019 - 2024. All rights reserved.