首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Django的AuthenticationMiddlewear不能在请求中返回用户对象

为什么Django的AuthenticationMiddlewear不能在请求中返回用户对象
EN

Stack Overflow用户
提问于 2010-07-30 09:28:53
回答 2查看 981关注 0票数 0

我的设置定义了以下MIDDLEWARE_CLASSES:

代码语言:javascript
运行
复制
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获得以下异常:

代码语言:javascript
运行
复制
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/session/cas处于糟糕的状态有关,因为它可以在新的浏览器上工作。

我正在尝试想象可能出了什么问题,以便我可以进一步调查。AuthenticationMiddlewear可以返回未设置用户属性的请求对象吗?这应该是导致django_cas中断言失败的唯一原因。

如果会话是陈旧的,request.user是否可能是未定义的,这是一个仅忽略AuthenticationMiddleware的问题?

EN

回答 2

Stack Overflow用户

发布于 2010-07-30 19:49:35

request.user不是未定义的,但是访问它(通过LazyUser)会抛出异常。这是因为我更改了django_cas后端的名称,但现有会话仍然设置了旧的后端名称。

如果您更改django_cas后端(或任何身份验证后端)的名称,将导致您之前的所有会话抛出服务器错误。

票数 1
EN

Stack Overflow用户

发布于 2016-08-30 17:21:31

您有未应用的迁移;在应用它们之前,您的应用程序可能无法正常工作。运行'python manage.py migrate‘来应用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3368158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档