Django AuthenticationMiddleware如何在请求中不返回用户对象

时间:2010-07-30 01:28:53

标签: python django

我的设置定义了以下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 / session / cas处于错误状态有关,因为它可以使用全新的浏览器。

我试图想象可能出现的问题,以便进一步调查。 AuthenticationMiddlewear是否可以返回没有设置用户属性的请求对象?这应该是导致django_cas中的断言失败的唯一原因。

如果会话过时可以request.user未定义,这是一个仅忽略AuthenticationMiddleware的问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您有未应用的迁移;在应用之前,您的应用可能无法正常运行。 运行' Sub foo() Dim obj As Object Dim row_no As Integer Set obj = ActiveSheet.Buttons(Application.Caller) With obj.TopLeftCell row_no = .Row End With MsgBox "The Button is in the row number " & row_no End Sub '应用它们。