1

私は Django を初めて使用するので、ユーザー認証とログインについて質問したいと思いました。ドキュメントを読みましたが、達成しようとしていることに関する適切な回答/指示を見つけることができませんでした。基本的に、レガシー システムに統合する必要があるため、デフォルトのauth_userテーブルなどは使用できません。以下に示すように、アプリで定義されたモデルがあります。

class User(models.Model):
    class Meta:
    db_table = 'user'
    def __unicode__(self):
    return self.first_name + ' ' + self.last_name

    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    email = models.CharField(max_length=64)
    password = models.CharField(max_length=32)
    active = models.CharField(max_length=1)
    last_modified = models.DateTimeField("last modified")
    timestamp = models.DateTimeField("timestamp")

私の質問は、上記のモデルをどのように利用して (またはどのような変更を加える必要があるのか​​)、認証アプリを操作できるかということです。現在、ドキュメントに従って、認証用に次のバックエンドがあります。

class CustomAuth(ModelBackend):
    def authenticate(**credentials):
        return super(CustomAuth, self).authenticate(**credentials)

    def authenticate(self, username=None, password=None):    
        # Check the username/password and return a User.
        if username != None and password != None:
            # Get the user
            try:
                user = User.objects.get(email=username)
                if user.check_password(password):
                    logger.info('User is authenticated, logging user in')
                    return user
            except User.DoesNotExist:
                pass
        return None

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

私は以下のようにテストしようとしました:

user = authenticate(username='test@gmail.com', password='testUser')

などのさまざまなエラーが発生し続け'module' object is not callableます。カスタム認証もsettings.pyファイルに含めました。私がやろうとしていることの例はありますか? どんな助けでも大歓迎です、ありがとう!

編集 私は自分のモデルを以下に変更しました:

from django.db import models
from django.contrib.auth.models import User as AuthUser, UserManager

# Extend the base User model
class User(AuthUser):
    class Meta:
        db_table = 'user'

    active = models.CharField(max_length=1)
    last_modified = models.DateTimeField("last modified")

    objects = UserManager()
4

1 に答える 1

3

1つの問題は、カスタムバックエンドに2つのauthenticateメソッドがあることです。おそらく一番上のものを削除したいと思うでしょう。

メールアドレスベースのログインを処理するためのカスタムバックエンドを作成する方法の例を次に示します。

于 2012-07-01T19:52:26.703 に答える