0

セカンダリ データベースで作成されたユーザーを取得する方法を理解しましたが、ユーザーが存在するかどうかを調べるときに、既定のデータベースではなくセカンダリ データベースを使用するようにデータベースを取得するには、何を使用すればよいかわかりません。認証済み。

私が持っているとしましょう:

user = authenticate(username=username, password=password)

デフォルトのデータベースを使用する代わりに、secondary という名前のデータベースを使用するように django に指示するにはどうすればよいですか?

また、これらは同じ方法に従うと思いますが、セカンダリ データベースを使用して login() または logout() を使用するにはどうすればよいでしょうか。

4

1 に答える 1

1

認証は資格情報のみを受け取り、ユーザーを取得するまでバックエンドで認証を呼び出すためのショートカットです。

https://github.com/django/django/blob/master/django/contrib/auth/init.py#L39 _ _

デフォルトのバックエンド ( https://github.com/django/django/blob/master/django/contrib/auth/backends.py#L4 )を使用していると仮定すると、このバックエンドを使用して非デフォルトのデータベースだと思います。

from django.contrib.auth.backends import ModelBackend

class NonDefaultModelBackend(ModelBackend):
    """
    Authenticates against django.contrib.auth.models.User.
    Using SOMEOTHER db rather than the default
    """
    supports_inactive_user = True

    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.using("SOMEOTHER").get(username=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return User.objects.using("SOMEOTHER").get(pk=user_id)
        except User.DoesNotExist:
            return None

これにより、デフォルトのバックエンドと同じ動作が得られると思いますが、デフォルト以外のデータベースを使用します。次に、バックエンドを設定に追加するか、デフォルトのバックエンドを完全に置き換えることができます.

AUTHENTICATION_BACKENDS = (
    'path.to.mybackends.NonDefaultModelBackend', 
    'django.contrib.auth.backends.ModelBackend',)

とか、ぐらい。

于 2012-04-19T00:15:59.343 に答える