在测试时手动获取CSRF令牌

时间:2012-01-22 20:39:26

标签: django

我有一个测试,我正在检查一些身份验证行为。在此测试中,我需要明确检查CSRF行为,因此我使用设置为enforce_csrf_checks的测试客户端True

self.csrf_client = Client(enforce_csrf_checks=True)

我的问题是,对于我来说,最简单的方法是手动获取CSRF令牌,并通过POST请求发送给我的客户端吗?

是定义返回csrf(request)的自定义测试视图,向该视图发出请求,提取CSRF令牌然后在POST请求中使用它的最佳选择,还是有一些更简单的方法可以获得要使用的CSRF令牌?

2 个答案:

答案 0 :(得分:11)

我知道这是一个老问题,但我在寻找解决方案时偶然发现了这个问题,现在我想分享我的解决方案以防其他人对此有问题。

登录后,CSRF令牌确实存储在cookie中,并且访问它时我必须执行以下操作:

self.client = Client(enforce_csrf_checks=True)
self.client.login(username='temporary', password='temporary')
self.client.get("/url_to_the_form/")
csrf_token = self.client.cookies['csrftoken'].value

答案 1 :(得分:1)

CSRF令牌应作为cookie(名为"csrftoken")发送到客户端。预计客户端会发送该cookie并提供进一步的请求。您的Client可以将Cookie复制到您需要的地方吗?