Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure lein测试期间出现无效的防伪错误_Clojure_Compojure - Fatal编程技术网

Clojure lein测试期间出现无效的防伪错误

Clojure lein测试期间出现无效的防伪错误,clojure,compojure,Clojure,Compojure,测试代码: (testing "adding a record" (let [response (app (mock/request :post "/api/df" "{\"id\":123}"))] (prn response) (is (= (:status response) 200)))) 请求响应时出现测试错误: {:status 403, :headers {"Cont

测试代码:

  (testing "adding a record"
    (let [response (app (mock/request :post "/api/df"
                                      "{\"id\":123}"))]
      (prn response)
      (is (= (:status response) 200))))
请求响应时出现测试错误:

 {:status 403, :headers {"Content-Type" "text/html; charset=utf-8", "X-XSS-Protection" "1; mode=block", "X-Frame-Options" "SAMEORIGIN", "X-Content-Type-Options" "nosniff"}, :body "<h1>Invalid anti-forgery token</h1>"}
{:status 403,:headers{“Content-Type”“text/html;charset=utf-8”,“X-XSS-Protection”“1;mode=block”,“X-Frame-Options”“SAMEORIGIN”,“X-Content-Type-Options”“nosniff”},:body“无效防伪令牌”}

跨站点请求伪造,是一种攻击,恶意攻击者在其站点上放置链接,欺骗该站点上某人的浏览器向您的站点发出请求

如果当时有人恰好登录到您的站点,那么该请求将导致事情发生,就像他们请求的那样(因为他们的浏览器请求发生)。这可能是一个非常严重的问题,它会影响GET和POST请求

一般的解决方案是,在与站点的第一次连接上不会发生严重的操作,而是在第一次连接上设置一个令牌头,服务器希望在下一次请求时看到该令牌头。这允许服务器验证请求链,从而防止CSRF(或XSRF)

听起来,如果您希望您的测试向该服务发出请求,您需要您的请求首先获取适当的CSRF令牌,然后发出它想要测试的请求


目前,您的测试是测试此调用是否不易受CSRF攻击,因此这是一个非常有用的测试,您应该保留它,并在发出请求之前编写另一个get是正确的令牌

我们可以在使用
的测试中禁用
csrf
(assoc site defaults:security false)
。完整的代码如下所示:

;在utilities.testing中创建测试应用程序的副本
; 通过使用测试中间件包装处理程序
(ns.测试
(:require[your-web-app.handler:参考[path handler]]
[ring.middleware.defaults:参考[wrap defaults site defaults]])
; 禁用CSRF进行测试
(def应用程序
(->路径处理程序
(包装默认值(关联站点默认值:安全性假)))
现在您可以在测试中使用此应用程序

(ns users.views-test)
(:需要[utilities.testing:参考[app]]
;...
))
;...
(测试“添加记录”
(让[响应(应用程序)(模拟/请求:post)/api/df)
“{\'id\':123}”)]
(prn响应)
(is((:状态响应)200)))

您的问题是…?如何编写测试来测试它?