0

我想出了如何在辅助数据库中创建用户,但我不知道应该使用什么来让数据库在查看用户是否存在时使用辅助数据库而不是默认数据库,然后可以认证。

说我有:

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

我如何告诉 django 使用名为 secondary 的数据库而不是使用默认数据库?

此外,我假设这些遵循相同的方法,但我将如何通过使用辅助数据库来使用 login() 或 logout()。

4

1 回答 1

1

authenticate 只需要凭据,并且是在您获得用户之前在后端调用身份验证的快捷方式:

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 回答