我最近开始尝试学习Clojure,并想要创建一个基本的CRUD功能的简单Web应用程序。我在这里找到了一个不错的教程:http://www.xuan-wu.com/2013-09-21-Basic-Web-Application-in-Clojure。
GET请求正常工作,但每当我尝试进行POST请求时,都会出现以下错误:
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”失败并显示无效令牌错误。 你有什么想法我做错了什么吗?
curl
还是在浏览器中? - leeor