使用不同的表进行身份验证和简单的 jwt - Django REST 框架

问题描述 投票:0回答:1

我对 Django REST 和整个 Django 有点陌生。由于我的 API 正在寻找 auth_user,您如何使用不同的表进行身份验证?

它一直在说:

[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'auth_user'. (208) (SQLExecDirectW); 
[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)" 

当我尝试将 jwt 令牌持有者添加到 [isAuthenticated] apiview 时。顺便说一句,我的 Django 使用 MSSQL。

我尝试将 AUTH_USER_MODEL 添加到我的模型中,但它显示相同的错误。

django django-rest-framework django-rest-framework-simplejwt
1个回答
0
投票

要在 Django 中使用不同的用户表进行身份验证,您需要确保正确配置

AUTH_USER_MODEL
设置。所以你需要定义一个自定义的用户模型并告诉django你想要使用它

在你的 models.py 中,尝试类似的操作:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError("The Email field must be set")
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)

        return self.create_user(email, password, **extra_fields)

class YourCustomUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    objects = CustomUserManager()

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

根据您的需要调整模型

创建 customUser 之后,您需要告诉 Django 您想要使用它:

在项目的settings.py中,找到这一行并指向你的模型:

AUTH_USER_MODEL = 'your_app_name.YourCustomUser'

然后进行迁移

© www.soinside.com 2019 - 2024. All rights reserved.