是否可以处理来自xsrf_cookies
的{{1}}。
目前,如果我为AsyncHTTPTestCase
请求编写测试,如下所示:
POST
我收到class TestFooHandler(AsyncHTTPTestCase):
def get_app(self):
return application.Application()
def test_foo_handler(self):
body = urllib.parse.urlencode({'foo': 'spam'})
response = self.fetch(self.get_url('/baz'), method='POST', body=body)
self.assertEqual(response.code, 200)
响应代码,即使请求在浏览器中返回403
响应代码。
我想这是因为没有200
令牌。在测试期间是否可以通过xsrf
令牌的此要求?
我使用的是Python xsrf
的Tornado版本4.2.1
,如果这很重要的话。
答案 0 :(得分:2)
在application.Application()
中,您必须将xsrf_cookies=True
传递给tornado.web.Application
构造函数。最简单的解决方案是简单地向application.Application()
添加一个参数来控制它。
如果您不想为安全功能添加“关闭”开关,则必须提供令牌。幸运的是,XSRF令牌不需要任何特定的结构;他们只需要在cookie和身体之间进行匹配。使用以下函数包装AsyncHTTPTestCase.fetch
:
def post(self, url, post_args):
post_args = dict(post_args)
post_args["_xsrf"] = "dummy"
body = urllib.urlencode(post_args)
headers = {"Cookie": "_xsrf=dummy"}
return self.fetch(url, body=body, headers=headers)