2010-07-30 24 views
0

我的設置有以下MIDDLEWARE_CLASSES定義:如何Django的AuthenticationMiddlewear不返回用戶對象在請求

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被忽略的問題?

回答

1

request.user不是未定義的,但訪問它(通過LazyUser)會引發異常。發生這種情況是因爲我更改了我的django_cas後端的名稱,但現有會話仍設置了舊的後端名稱。

如果您更改您的django_cas後端(或任何身份驗證後端)的名稱,它會導致您以前的所有會話拋出服務器錯誤。

+0

快速注意,使用''python manage.py clearsessions''可能無濟於事,因爲它只會清理過期的會話:https://docs.djangoproject.com/en/dev/ref/django-admin /#clearsessions – amjoconn 2014-04-03 14:49:06

0

您有未應用的遷移;在應用之前,您的應用可能無法正常工作。 運行'python manage.py migrate'來應用它們。

相關問題