2

おもちゃの Web アプリケーションを作成するために試薬と構成ツールを使用していますが、サーバーが CSRF Coo​​kie を送信しない理由がわかりません。他の回答といくつかのブログ投稿は、 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 hereに投げました。

4

2 に答える 2

1

そのため、関連する質問について、現時点で十分な回答を見つけました。middleware.cljsite-defaultsapi-defaultsCSRF を使用しないものに切り替えました。ここで CSRF を機能させる方法にまだ興味がありますが、私がやっていることは重要ではありません。後者の誰かが機能する修正を提案した場合、私はそれを正しいとマークします。

于 2016-03-08T03:17:09.623 に答える