每次登录时生成新的django CSRF令牌

时间:2015-03-16 16:25:03

标签: javascript django csrf django-csrf csrf-protection

我希望我的网站登录表单每次刷新页面时都会生成一个新的CSRF令牌。

我试着打电话

logout(request)
request.session.flush()

但是隐藏的表单字段总是具有相同的标记,即使在服务器重启后也是如此。

这显然意味着django正在从cookie中读取数据。 如何使它忽略cookie并生成一个新的?

或者,有没有办法让我有一个中间页面,在进入实际登录页面之前清除所有cookie?如何在Javascript中删除我的域的所有cookie?

2 个答案:

答案 0 :(得分:5)

您可以按如下方式手动重置令牌:

from django.middleware.csrf import _get_new_csrf_key

request.META["CSRF_COOKIE_USED"] = True
request.META["CSRF_COOKIE"] = _get_new_csrf_key()

在Django> = 1.6中,您应该使用django.middleware.csrf.rotate_token(request),这正是这样做的。

答案 1 :(得分:2)

尝试将CSRF_COOKIE_AGE=None设置为使用基于会话的CSRF cookie,这样可以将cookie保留在内存中而不是持久存储中。我想如果您注销用户,CSRF令牌应该会改变。 See the docs.