2016-01-29 6 views
3

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

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

Эти токены по умолчанию, и мы должны использовать 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, против часовой стрелки.

ответ

2

Вы должны добавить (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"))]))