处理xsrf_cookies的AsyncHTTPTestCase

时间:2015-11-01 20:36:44

标签: tornado

是否可以处理来自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,如果这很重要的话。

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)