Недействительный токен защиты от подделки

Я получаю сообщение «Недействительный токен защиты от подделки», когда пытаюсь использовать метод POST в проекте Clojure Webapp, созданном с помощью шаблона Compojure.

Я исследовал, и промежуточное программное обеспечение Ring создает токены CSRF (формы межсайтовых запросов) для аутентифицированных запросов, поступающих с других сайтов (для использования чужих учетных данных, которые уже вошли в систему и имеют доступ к страницам, к которым не разрешен доступ).

Эти токены используются по умолчанию, и нам нужно использовать wrap-params ring.middleware для нашего WebApp. Ничего не получилось. Пожалуйста помоги !! Как избавиться от Недействительного токена защиты от подделки.

Мой файл handler.clj:

(ns jsonparser-webapp.handler
   (:require [compojure.core :refer :all]
        [compojure.route :as route]
        [jsonparser-webapp.views :as views])
   (:use [ring.middleware.params :only [wrap-params]])

(defroutes app-routes
  (GET "/" 
    [] 
    (views/home-page))
  (GET "/goto" 
    [] 
    (views/goto))
  (POST "/posted"
     {params :params} 
     (views/posted params))
  (route/not-found "Not Found"))

(def app
    (wrap-params app-routes site-defaults))

Мой файл views.clj

(ns jsonparser-webapp.views
   (:require [hiccup.page :as hic-p]
             [hiccup.form :as hf]))

(defn gen-page-head
  [title]
  [:head
     [:title title]])

(defn home-page
  []
  (hic-p/html5
      (gen-page-head "Json Parser Home.")
      [:h1 "Welcome."]
      [:p "Json Web App."]
      [:a {:href "http://localhost:3000/goto"} "Goto"]
      [:p (hf/form {:action "/posted" :method "POST"} 
             (hf/text-field "TextInput")    
             (hf/submit-button "Submit"))]))

(defn goto
  []
  (hic-p/html5
      (gen-page-head "Goto Page.")
      [:h1 "Hi."]
      [:p "Go where?"]))

(defn posted
   [{:keys [x]}]
   (hic-p/html5
      (gen-page-head "Posted.")
      [:h1 "You posted."]
      [:p x]))

Проект создан с использованием шаблона Compojure Clojure в Eclipse CounterClockwise.


person yaseenexists    schedule 29.01.2016    source источник


Ответы (1)


Вы должны добавить (anti-forgery-field) в свою форму, чтобы маркер защиты от подделки был введен в параметры POST.

Нравится:

(ns jsonparser-webapp.views
  (:require [hiccup.page :as hic-p]
>           [ring.util.anti-forgery :refer [anti-forgery-field]]
            [hiccup.form :as hf]))

(defn gen-page-head
  [title]
  [:head
   [:title title]])

(defn home-page
  []
  (hic-p/html5
    (gen-page-head "Json Parser Home.")
    [:h1 "Welcome."]
    [:p "Json Web App."]
    [:a {:href "http://localhost:3000/goto"} "Goto"]
    [:p (hf/form {:action "/posted" :method "POST"} 
         (hf/text-field "TextInput")    
 >       (anti-forgery-field)
         (hf/submit-button "Submit"))]))
person Bram    schedule 29.01.2016