0

私はレガシー データベースを使用しているcontrib.auth.models.Userため、認証にはデフォルトの Django の代わりに別のモデルを使用する必要があります。

私のモデルには、ユーザー名に使用される 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を使用すると、認証テーブルが追加されましたが、db自体を使用する場合はどうなりますか?同じことをする必要がありますか?)これは、アプリの既存の認証システムを処理する正しい方法ですか?

4

1 に答える 1

1

authdb エントリは、通常、パスワードよりもはるかに長く、それに応じてストレージ用により多くのスペースを必要とします。

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

詳細については、Linux のcrypt(3)man ページを参照してください。

于 2012-08-08T22:09:04.420 に答える