django - 如何在 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');
但这对身份验证没有帮助。
解决方案
请检查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
推荐阅读
- go - golang模板双父上下文
- sql - 获取 Super 和 sub 类型的列表
- wordpress - WooCommerce PDF 发票和装箱单在中文中不起作用
- performance - 使用 Docker 对简单的 Go 服务器造成巨大的性能影响
- php - 调用未定义的方法 PHPExcel_Reader_HTML::listWorksheetNames()
- azure - Azure 门户和 App Insights Analytics 中显示的不同用户数据
- javascript - 使用 Sequelize 将字节数组插入 MySQL VARBINARY 列
- c++ - 提示错误时的 emplace_hint 性能
- r - 如何在 R 语言的 sum() 中添加函数
- dns - 寻找快速缓存 DNS 解析器(服务器或库)