如何让Django的AuthenticationMiddleware不在请求中返回用户对象
我的设置中定义了以下的 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'.
我猜测这可能和我的 cookies、会话或 cas 状态不太好有关,因为在新打开的浏览器中是可以正常工作的。
我在想可能出了什么问题,以便进一步调查。AuthenticationMiddlewear 是否有可能返回一个没有用户属性的请求对象?这应该是导致 django_cas 失败的唯一原因。
如果会话过期了,request.user 会不会变成未定义?这是否是 AuthenticationMiddleware 单独忽略的问题?
2 个回答
0
你有一些未应用的迁移,这可能会导致你的应用程序无法正常工作。请运行 'python manage.py migrate
' 来应用这些迁移。
1
request.user 这个东西并不是没定义,但当我通过 LazyUser 去访问它时却出现了错误。这是因为我改了我的 django_cas 后台的名字,但之前的会话还是用的旧的后台名字。
如果你改了 django_cas 后台的名字(或者其他任何认证后台),那么之前的所有会话都会出现服务器错误。