Django (токен CSRF отсутствует или неверен) подавляет ведение журнала - PullRequest
1 голос
/ 21 мая 2019

В нашем веб-приложении довольно часто пользователи случайно открывают страницу входа в систему на нескольких вкладках и вызывают ошибку «Отсутствует или неверен токен CSRF» в Django.

Я хотел бы отключить это конкретное сообщение в нашем журналепотому что он генерирует много шума, и проблема не может быть решена.С другой стороны, любая другая проблема в процессе входа в систему должна регистрироваться, поэтому я не хотел бы исключать из приложения целое приложение или класс Django.

Есть ли у вас какие-либо предложения о том, как подавить это конкретное общеесообщение об ошибке?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

В соответствии с официальной документацией django вы можете обновить свои LOGGING настройки следующим образом:

'handlers': {
    'null': {
        'class': 'logging.NullHandler',
    },
},
'loggers': {
    'django.security.csrf': {
        'handlers': ['null'],
        'propagate': False,
    },
},
1 голос
/ 21 мая 2019

Если вы хотите только подавить эту конкретную ошибку, но по-прежнему регистрировать другие ошибки, связанные с CSRF, она становится немного хитрой.

Модуль CSRF использует регистратор с именем django.security.csrf.Сообщение регистрируется в методе _reject из CsrfViewMiddleware.Вы можете добавить фильтр к этому регистратору, который отфильтровывает записи журнала с указанием причины ошибки в аргументах.Это будет выглядеть примерно так:

from django.middleware.csrf import REASON_BAD_TOKEN

def missing_token_filter(record):
    return REASON_BAD_TOKEN not in record.args

LOGGING = {
   ...,
   'handlers': {
       ...
       'django.security.csrf': {
           'filters': ['missing_token_filter']
       }
   },
   'filters': {
       ...,
       'missing_token_filter: {
           '()': 'path.to.missing_token_filter',
       },
}
...