2012-01-13 125 views
12

我設置了一個包含管理頁面的django項目。它在開發的前幾個星期完美運行,一段時間沒有使用管理頁面,當我回到它時,管理頁面被打破。無論我做什麼,它不會讓我登錄django上的管理頁面被破壞

輸入用戶名和PW後,管理頁面總是說:

Please enter a correct username and password. Note that both fields are case-sensitive. 

我檢查了DB:超級用戶存在,並且has_active,is_superuser和is_staff全部爲True。我使用shell來確保密碼是正確的。我已經刷新,刪除,並重新創建數據庫多次,以確保沒有錯誤。我還重新檢查了中間件,網址,INSTALLED_APPS等,確保它們都正確設置。

據我所知,在管理頁面完美地工作,只是他們從來沒有讓任何人登錄。

任何想法是怎麼回事,或其他方法試圖調試?我很困惑這個bug。 PS:如果有問題,我使用South進行數據庫遷移,使用django-social-auth進行FB登錄,單獨使用local_settings.py進行生產和開發(我已經檢查過它們 - 衝突不是't there。)

+0

如果使用auth.views.login()視圖創建自己的登錄頁面,會發生什麼情況? – JeffS 2012-01-13 01:08:27

+0

看起來像幾乎相同的問題:「您的用戶名和密碼不匹配,請重試。」 – Abe 2012-01-13 01:21:07

+0

爲了獲得爲FB登錄工作的django-social-auth,你是否修改了任何可能改變系統運行authenticate()和login()方式的代碼?另外,在開發的幾個星期裏,你是否已經刪除並重新創建了項目,這樣settings.py的SECRET_KEY ='...'已經改變了?我認爲這個密鑰是用來解密密碼的,但我並不積極。 – Furbeenator 2012-01-13 01:23:05

回答

14

此問題可能與身份驗證後端有關。 請檢查您的設置文件的AUTHENTICATION_BACKENDS參數。

請嘗試以下值:上 Official Django Documentation

+0

賓果。這就是問題所在 - 當我添加了django-social-auth時,它包含了一整套認證後端,包括django.contrib.auth.backends.ModelBackend。我評論了所有我不打算使用的行,但沒有注意到我也在評論這一行。 – Abe 2012-01-13 04:45:02

1

試試這個;在tests.py:

from django.contrib import auth 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = User.objects.create_user('[email protected]', '[email protected]', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

然後用python manage.py test <your_app_name>.AuthTestCase運行測試。如果通過,系統正在工作,也許看用戶名和密碼,以確保他們可以接受。

+1

測試有效 - 返回OK。但網站上的登錄仍然無效。我使用check_password檢查了shell中的密碼,並且它返回True。這裏有一些更奇怪的東西:如果我輸入的是我的電子郵件地址而不是超級用戶名,我會得到「您的電子郵件地址不是您的用戶名,請嘗試'agong'。」所以它顯然能夠訪問數據庫中的記錄 - 它只是不會讓我登錄。 – Abe 2012-01-13 01:55:31

0

你可以做以下

AUTHENTICATION_BACKENDS = (
    ('django.contrib.auth.backends.ModelBackend'), 
) 

的更多信息:

  • 輸入您的MySQL(或其他數據庫控制檯)
  • 使用YourDATABASE;
  • SELECT * from auth_user;
  • watch is_staff and is_superuser item
  • UPDATE auth_user SET is_staff =「1」其中username =「root」;

然後你可以再次登錄!

0

我有同樣的問題,但設置文件上的AUTHENTICATION_BACKENDS標誌對我來說不是問題。不知何故,我使用Django Rest Framework修改了密碼而不調用set_password,因此繞過了密碼散列。這就是它顯示無效登錄的原因。

我能夠以通過類似的測試,測試用戶創建運行簡單的測試來檢測問題:

from django.test import TestCase 

from django.contrib import auth 
from .models import * 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = UserProfile.objects.create_user('[email protected]', 'iamtest', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

還值得一提的是,我是創建一個名爲用戶配置

自定義用戶