【发布时间】:2016-01-12 22:37:56
【问题描述】:
我最近开始探索 Clojure,我想建立一个具有基本 CRUD 功能的简单 Web 应用程序。我在这里找到了一个不错的教程:http://www.xuan-wu.com/2013-09-21-Basic-Web-Application-in-Clojure。
GET 请求工作正常,但每当我尝试发布请求时,都会收到以下错误:
Invalid anti-forgery token
我之前提到的教程没有涉及任何与安全相关的内容。我做了一些挖掘,似乎我错过了 Compojure 的一些组件,这些组件应该生成一个用于发出 POST 请求的令牌。有些地方提到我应该自动发生而不需要我做任何改变。我仍然不确定我错过了什么。这是我的代码:
(ns myblog.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
[myblog.views :as views]
[myblog.posts :as posts]
[ring.util.response :as resp]
[ring.middleware.basic-authentication :refer :all]))
(defn authenticated? [name pass]
(and (= name "user")
(= pass "pass")))
(defroutes public-routes
(GET "/" [] (views/main-page))
(route/resources "/"))
(defroutes protected-routes
(GET "/admin" [] (views/admin-page))
(GET "/admin/add" [] (views/add-post))
(POST "/admin/create" [& params]
(do (posts/create params)
(resp/redirect "/admin"))))
(defroutes app-routes
public-routes
(wrap-basic-authentication protected-routes authenticated?)
(route/not-found "Not Found"))
(def app
(wrap-defaults app-routes site-defaults))
同样,只有 POST 请求“/admin/create”因无效令牌错误而失败。知道我做错了什么吗?
【问题讨论】:
-
你是如何发出 POST 请求的?类似
curl或浏览器中的内容? -
在浏览器中。我正在向 /admin/create 提交表单。
标签: post clojure compojure antiforgerytoken