Как может AuthenticationMiddlewear Django не возвращать пользовательский объект в запросе - PullRequest
0 голосов
/ 30 июля 2010

В моих настройках определены следующие MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_cas.middleware.CASMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

Время от времени я получаю следующее исключение из django-cas при любом просмотре страницы:

Traceback (most recent call last):

 File "/storage/virtualenvs/service.iqc.ca/lib/python2.6/site-packages/django/core/handlers/base.py", line 80, in get_response
   response = middleware_method(request)

 File "/storage/virtualenvs/service.iqc.ca/lib/python2.6/site-packages/django_cas/middleware.py", line 25, in process_request
   assert hasattr(request, 'user'), error

AssertionError: The Django CAS middleware requires authentication middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware'.

Я предполагаю, что это как-то связано с тем, что мои cookie / сессия / cas находятся в плохом состоянии, потому что они будут работать с новым браузером.

Я пытаюсь представить, что может пойти не так, чтобы я мог продолжить расследование. Может ли AuthenticationMiddlewear когда-либо возвращать объект запроса, для которого не установлен атрибут пользователя? Это должно быть единственным, что приводит к сбою assert в django_cas.

Если сессии устарели, может быть request.user быть неопределенным, и это проблема, которая игнорируется только AuthenticationMiddleware?

Ответы [ 2 ]

1 голос
/ 30 июля 2010

request.user не является неопределенным, но доступ к нему (через LazyUser) вызывает исключение. Это произошло из-за того, что я изменил имя своего бэкэнда django_cas, но в существующих сессиях все еще было установлено старое имя бэкэнда.

Если вы измените имя своего бэкэнда django_cas (или любого бэкэнда аутентификации), все предыдущие сеансы будут вызывать ошибки сервера.

0 голосов
/ 30 августа 2016

у вас есть непримененные миграции; Ваше приложение может работать некорректно, пока они не будут применены. Запустите 'python manage.py migrate', чтобы применить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...