旧版数据库的自定义身份验证后端

时间:2012-08-08 17:43:30

标签: django authentication legacy-database

由于我正在使用旧数据库,因此我应该使用另一个模型而不是默认的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本身时呢?我应该这样做吗?) 这是处理我应用程序现有身份验证系统的正确方法吗?

1 个答案:

答案 0 :(得分:1)

authdb条目通常比密码长得多,并且需要相应的更多存储空间。

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

有关详细信息,请参阅Linux的crypt(3)手册页。