首页 > 解决方案 > 如何在 Django 中创建自定义用户以从外部数据库进行身份验证?

问题描述

我用 UserManager 创建了一个 Django CustomUser 模型。它工作得很好,但我没有找到一种方法将此模型与已经包含一些数据的 MyQSL 辅助数据库(不是默认数据库)一起使用。

设置文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'default',
        'HOST': '',
        'USER': '',
        'PASSWORD': '',
        'PORT': '',
    },
    'secondary': {
        'NAME': 'secondary',
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '',
        'USER': '',
        'PASSWORD': '',
    },

楷模:

class CustomUserManager(BaseUserManager):
    def create_user(self, username, password=None):
        user_obj = self.model(
            username=username
        )
        user_obj.set_password(password)
        user_obj.save(using=self._db)
        return user_obj

    def create_superuser(self, username, password):
        user_obj = self.create_user(
            username=username,
            password=password,
        )
        user_obj.save(using=self._db)
        return user_obj


class CustomUser(AbstractBaseUser):
    username = models.CharField(max_length=50, blank=False, unique=True)
    email = models.CharField(null=True, max_length=200, blank=False)
    first_name = models.CharField(null=True, max_length=200, blank=False, db_column='firstName')
    last_name = models.CharField(null=True, max_length=200, blank=False, db_column='lastName')
    last_login = timezone.now()
    USERNAME_FIELD = 'username'

    objects = CustomUserManager()

    class Meta:
        db_table = 'secondary'

我可以像这样从视图中获取数据queryset = CustomUser.objects.using('secondary_database');

但这对身份验证没有帮助。

标签: djangodjango-models

解决方案


请检查https://docs.djangoproject.com/en/3.0/topics/db/multi-db/#an-example,您将在初始化查询集之前预先选择合适的数据库。

或者尝试在您的类上覆盖get_queryset方法。CustomUserManager

顺便说一句,你更新你的AUTH_USER_MODEL设置了吗?- https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#substituting-a-custom-user-model


推荐阅读