Django: создать новый токен CSRF для каждого запроса/формы

Можем ли мы изменить токен CSRF для каждой формы запроса или даже для запроса вместо одного же токена для одного активного сеанса?

Ответ 1

В промежуточном программном обеспечении csrf они делают что-то вроде этого, которое перезаписывает набор файлов cookie:

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

Вы можете импортировать _get_new_csrf_key() через from django.middleware.csrf import _get_new_csrf_key(). Поскольку это своего рода частный метод, я бы посоветовал не использовать такие хаки, как это.

Ответ 2

Предполагая, что у вас есть доступ к объекту request:

from django.middleware.csrf import rotate_token
rotate_token(request)

Ответ 3

И если вы хотите использовать его в промежуточном программном обеспечении:

from django.middleware.csrf import rotate_token

class CSRFRefresh(object):
    def process_response(self, request, response):
        rotate_token(request)
        return response