2012-08-08 50 views
0

由於我正在使用舊數據庫,因此我應該使用其他模型而不是默認的Django contrib.auth.models.User進行身份驗證。傳統數據庫的自定義身份驗證後端

我的模型有一個id字段(id = models.DecimalField(...)),用於管理員從數據庫接口定義的用戶名和密碼字段(password = models.CharField(...))。

我寫我自己的認證後端:

from auth.models import Owners 
from django.contrib.auth.models import User 

class AuthBackend(object): 
    def authenticate(self, username, password): 
     try: 
      owner = Owners.objects.get(id=username, password=password) 
      try: 
       user = User.objects.get(id=owner.id) 
       print user 
      except User.DoesNotExist: 
       user = User(id=owner.id) 
       user.is_staff = False 
       user.is_superuser = False 
       user.set_unusable_password() 
       user.save() 
      return user 

     except Owners.DoesNotExist: 
      return None 

    def get_user(self, id): 
     try: 
      return User.objects.get(id=id) 
     except User.DoesNotExist: 
      return None 

我想問某事也許微不足道,但因爲我現在創建用戶和我利用有Django的認證模塊的它自己的表等,是否也應該將它們添加到我使用的遺留數據庫中(現在我正在處理它的一個實例,並且使用synchdb獲得了auth表,但是當我使用db本身時,我該怎麼做?) 這是處理我的應用程序的現有認證系統的正確方法嗎?

+0

你可以發佈你的實際用戶模型嗎?另外,當你說你的問題與'PASSWORD_HASHERS'設置類似時,你是否得到了同樣的錯誤信息?什麼時候? – supervacuo 2012-08-08 21:39:56

回答

1

authdb條目通常比密碼長得多,並且需要相應更多的存儲空間。

$<algorithm>$<salt>$<hash> 

有關詳細信息,請參閱Linux的crypt(3)手冊頁。