【后端】【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.pswp.cn/pingmian/72294.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72294.shtml
英文地址,請注明出處:http://en.pswp.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的處理方式的…