【后端】【django】抛弃 Django 自带用户管理后,能否使用 `simple-jwt`?

抛弃 Django 自带用户管理后,能否使用 simple-jwt

一、结论

是的,即使抛弃了 Django 自带的用户管理AbstractUserAbstractBaseUser),仍然可以使用 django-rest-framework-simplejwt(简称 simple-jwt)来进行 JWT 认证。但需要进行 额外配置,确保 simple-jwt 能识别和处理你的自定义用户模型。


二、Django 用户管理的作用

Django 自带的用户管理提供:

  1. AbstractUser / AbstractBaseUser 作为默认用户模型。
  2. django.contrib.auth 认证系统,如 authenticate()login()logout()
  3. 默认的 User 模型,用于管理权限、组等。

如果你完全抛弃 Django 的用户管理(如不继承 AbstractUser),你需要:

  • 自定义用户模型
  • 自定义 simple-jwt 的用户解析逻辑
  • 手动实现 authenticate() 逻辑

三、如何自定义 JWT 认证

1. 安装 djangorestframework-simplejwt
pip install djangorestframework-simplejwt
2. 在 settings.py 进行基础配置
INSTALLED_APPS += ["rest_framework_simplejwt"]REST_FRAMEWORK = {"DEFAULT_AUTHENTICATION_CLASSES": ("rest_framework_simplejwt.authentication.JWTAuthentication",)
}
3. 自定义用户模型

如果你不使用 Django 默认的 User,可以创建自己的 CustomUser 模型:

from django.db import modelsclass CustomUser(models.Model):id = models.AutoField(primary_key=True)username = models.CharField(max_length=255, unique=True)email = models.EmailField(unique=True)password = models.CharField(max_length=255)is_active = models.BooleanField(default=True)def __str__(self):return self.username
4. 自定义 get_user_model()

由于 Django 默认的 get_user_model() 依赖 AbstractUser,如果完全抛弃 Django 用户管理,你可以手动指定用户模型

from myapp.models import CustomUserdef get_custom_user(identifier):"""支持使用用户名或邮箱获取用户"""try:return CustomUser.objects.get(username=identifier)except CustomUser.DoesNotExist:try:return CustomUser.objects.get(email=identifier)except CustomUser.DoesNotExist:return None
5. 自定义 JWTAuthentication

因为 simple-jwt 默认使用 Django 自带的 User,你需要自定义 JWTAuthentication 来适配 CustomUser

from rest_framework_simplejwt.authentication import JWTAuthenticationclass CustomJWTAuthentication(JWTAuthentication):def get_user(self, validated_token):try:user_id = validated_token.get("user_id")return CustomUser.objects.get(id=user_id)except CustomUser.DoesNotExist:return None

然后在 settings.py 替换 DEFAULT_AUTHENTICATION_CLASSES

REST_FRAMEWORK = {"DEFAULT_AUTHENTICATION_CLASSES": ("path.to.CustomJWTAuthentication",)
}
6. 自定义 Token 生成视图

由于 simple-jwt 默认使用 User 进行认证,你需要自定义 Token 生成逻辑

from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from django.contrib.auth.hashers import check_passwordclass CustomTokenObtainPairSerializer(TokenObtainPairSerializer):def validate(self, attrs):username = attrs.get("username")password = attrs.get("password")user = get_custom_user(username)if not user or not check_password(password, user.password):raise serializers.ValidationError("用户名或密码错误")data = super().validate(attrs)return dataclass CustomTokenObtainPairView(TokenObtainPairView):serializer_class = CustomTokenObtainPairSerializer

然后在 urls.py 里注册:

from django.urls import path
from path.to.views import CustomTokenObtainPairView
from rest_framework_simplejwt.views import TokenRefreshViewurlpatterns = [path("api/token/", CustomTokenObtainPairView.as_view(), name="token_obtain_pair"),path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
]

四、总结

方案需要修改
直接使用 Django User无需修改,默认支持 simple-jwt
继承 AbstractUser支持 simple-jwt,只需 settings.AUTH_USER_MODEL
完全自定义用户模型需要手动适配 JWTAuthentication,重写 TokenObtainPairSerializer
推荐方案
  • 如果只是调整 User 字段,建议继承 AbstractUser,这样 simple-jwt 仍然可用
  • 如果完全自定义用户模型,必须手动适配 simple-jwt

总之,抛弃 Django 的 User 仍然可以使用 simple-jwt,但需要额外开发 JWTAuthentication 逻辑。🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【量化科普】Correlation,相关性

【量化科普】Correlation,相关性 🚀量化软件开通 🚀量化实战教程 在量化投资领域,相关性(Correlation)是一个核心概念,用于衡量两个变量之间的线性关系强度和方向。简单来说,它告…

大数据学习(68)- Flink和Spark Streaming

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

MCU详解:嵌入式系统的“智慧之心”

在现代电子设备中, MCU(Microcontroller Unit,微控制器)扮演着至关重要的角色。从智能家居到工业控制,从汽车电子到医疗设备,MCU以其小巧、低功耗和高集成度的特点,成为嵌入式系统的核心组件。 …

(链表)24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1,4…

吴恩达机器学习笔记复盘(三)Jupyter NoteBook

Jupyter NoteBook Jupyter是一个开源的交互式计算环境: 特点 交互式编程:支持以单元格为单位编写和运行代码,用户可以实时看到代码的执行结果,便于逐步调试和理解代码逻辑。多语言支持:不仅支持Python,还…

【Linux】从互斥原理到C++ RAII封装实践

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

微服务无状态服务设计

微服务无状态服务设计是构建高可用、高扩展性系统的核心方法。 一、核心设计原则 请求独立性 每个请求必须携带完整的上下文信息,服务不依赖本地存储的会话或用户数据。例如用户认证通过JWT传递所有必要信息,而非依赖服务端Session。 状态外置化 将会话…

30、map 和 unordered_map的区别和实现机制【高频】

底层结构 map底层是红黑树结构,而unordered_map底层是哈希结构; 有序性 但是红黑树其实是一种二叉搜索树,插入删除时会自动排序hash因为是把数据映射到数组上的,而且存在哈希冲突,所以不能保证有序存储 所以有序存储使用map&a…

大数据-spark3.5安装部署之local模式

spark,一个数据处理框架和计算引擎。 下载 local模式即本地模式,就是不需要任何其他节点资源就可以在本地执行spark代码的环境。用于练习演示。 上传解压 使用PortX将文件上传至/opt 进入/opt目录,创建目录module,解压文件至/o…

Manus “Less structure,More intelligence ”独行云端处理器

根据市场调研机构Statista数据显示,全球的AR/AR的市场规模预计目前将达到2500亿美元,Manus作为VR手套领域的领军企业,足以颠覆你的认知。本篇文章将带你解读Manus产品,针对用户提出的种种问题,Manus又将如何解决且让使…

Oracle数据库存储结构--逻辑存储结构

数据库存储结构:分为物理存储结构和逻辑存储结构。 物理存储结构:操作系统层面如何组织和管理数据 逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…

芯驿电子 ALINX 亮相德国纽伦堡,Embedded World 2025 精彩回顾

2025年3月13日,全球规模最大的嵌入式行业盛会——德国纽伦堡国际嵌入式展(embedded world 2025)圆满落幕。 在这场汇聚全球 950 家展商、3 万余专业观众的科技盛宴中,芯驿电子 ALINX 展位人头攒动,多款尖端产品吸引客户…

Nexus File类型Blob Stores迁移至Minio操作指南(上)

#作者:闫乾苓 文章目录 目的前期准备查看file类型Blob Stores数据目录位置aws cli客户端连接工具OrientDB cli客户端连接工具在minio中新建 bucket 目的 增强nexus构件数据的高可用性和扩展性 前期准备 查看并记录需要迁移的Blob Store及repository 查看fil…

蓝桥杯嵌入式组第十二届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之,藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 LED模块1.3.3 LCD模块1.3.4 TIM模块1.3.5 UART模块1.3.5.1 uart数据解析 2.源码3.第十二届题目 前言:STM32G431RBT6实现嵌入式组第十二届题目解析源码&#…

【MySQL】表的约束(上)

文章目录 表的约束什么是表的约束空属性默认值列描述(comment)零填充(zerofill)主键 总结 表的约束 什么是表的约束 表的约束(Constraints)是数据库表中的规则,用于限制存储的数据&#xff0c…

【Unity网络同步框架 - Nakama研究(三)】

文章目录 【Unity网络同步框架 - Nakama研究(三)】准备工作前言Unity部分连接服务器创建并进入房间创建人物人物移动和同步 【Unity网络同步框架 - Nakama研究(三)】 以下部分需要有一定的Unity基础,在官方的案例Pirate Panic基础上进行修改而成。如果没有下载并熟悉…

前端存储-indexdb封装:dexie.js的使用

前言 indexedDB是一个用于在浏览器中存储较大数据结构的Web API,并且提供了索引功能以实现高性能查找。dexie.js是对indexdb的封装,前端用起来很方便。在此介绍一下项目中用到的操作语句,也方便记录。我的项目是vue3项目。 开始 1、安装 …

【AD】6-1 PCB常用规则

间距规则: 可自行修改线宽与间距(默认10mil) 线宽规则:电源线宽加粗 布线过程中更改线宽:走线状态下,shiftw更改线宽,线宽要在规则范围之内过孔规则: 阻焊规则:

MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?

MyBatis 的核心配置文件&#xff08;通常命名为 mybatis-config.xml&#xff09;是 MyBatis 应用程序的入口点&#xff0c;它定义了 MyBatis 的全局配置信息 。 核心配置文件的作用&#xff1a; 配置 MyBatis 的运行时行为: 通过 <settings> 标签设置全局参数&#xff…

搜广推校招面经四十九

tiktok广告算法 一、倒排索引原理及Map中Key的处理 具体使用方法见【搜广推校招面经三十六】 倒排索引&#xff08;Inverted Index&#xff09;是信息检索系统中常用的一种数据结构&#xff0c;用于快速查找包含某个关键词的文档。以下是倒排索引的原理及Map中Key的处理方式的…