讲师中心 微信公众号
AI工具推荐 视频效率加速

如何实现Django与Vue的前后端分离认证_利用Python的DRF扩展Token鉴权

阿强大大_8268

阿强大大_8268

发布时间:2026-07-22 07:26:27

|

339人浏览过

|

来源于php中文网

原创

DRF的TokenAuthentication不能直接用于Vue单页应用,因其依赖手动注入Authorization头、不支持Token过期与刷新,且缺乏配套登录视图;应改用djangorestframework-simplejwt,配合Axios拦截器、sessionStorage存储及后端JWT配置。

如何实现django与vue的前后端分离认证_利用python的drf扩展token鉴权

DRF的TokenAuthentication为什么不能直接用于Vue单页应用

因为 TokenAuthentication 默认依赖 HTTP 请求头中的 Authorization: Token xxx,而 Vue 前端发起请求时不会自动携带该头——它不像 Django 模板渲染那样能隐式注入 CSRF 和 session 信息。更关键的是,原生 TokenAuthentication 不支持 Token 过期、刷新、用户绑定设备等常见需求,一用就卡在登录后 401 或跨域请求被拒。

实操建议:

立即学习“Python免费学习笔记(深入)”;

Claw Code Suite (Python-Only Edition)
Claw Code Suite (Python-Only Edition)

仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...

下载
  • 别直接用 rest_framework.authentication.TokenAuthentication,它只是个基础验证器,没配套的登录/登出视图和 Token 生命周期管理
  • 改用 djangorestframework-simplejwt(推荐)或 drf-token-refresh,它们提供标准的 /api/token/、/api/token/refresh/ 接口,Vue 可以用 Axios 统一拦截器注入 Authorization 头
  • 确保 Django 的 CORS_ORIGIN_WHITELIST(或 CORS_ALLOWED_ORIGINS)包含 Vue 开发服务器地址,比如 "http://localhost:5173",否则预检请求(OPTIONS)直接失败
  • 前端必须手动保存 Token 到 localStorage 或 sessionStorage,且每次请求前读取并设置 headers.Authorization = `Bearer ${token}`

Vue 中如何安全地存储和传递 JWT Token

localStorage 看似方便,但 XSS 攻击可直接读取;放在 Cookie 里又得处理 HttpOnly 和 SameSite 限制。折中方案是:用 sessionStorage 存 Token + Axios 请求拦截器统一注入,同时后端设置 Token 短期有效(如 15 分钟),强制前端调用 /api/token/refresh/ 获取新 Token。

实操建议:

立即学习“Python免费学习笔记(深入)”;

  • 登录成功后,把响应里的 access 和 refresh 字段分别存入 sessionStorage:sessionStorage.setItem('access_token', response.data.access)
  • Axios 全局请求拦截器中读取:config.headers.Authorization = 'Bearer ' + sessionStorage.getItem('access_token'),注意判空避免 401 泛滥
  • 对 401 响应做单独拦截:若错误是 "Token is invalid or expired",则用 refresh Token 尝试续期;失败再跳转登录页
  • 不要在 Vue Router 的 beforeEach 里反复读取 Token 并校验——那是后端的事,前端只负责透传

Django 后端如何配置 simplejwt 并兼容 Vue 跨域请求

simplejwt 默认返回的 Token 不带过期时间字段,Vue 很难做自动刷新判断;另外它的默认签名密钥是硬编码的 SIMPLE_JWT['SIGNING_KEY'],生产环境必须替换为环境变量读取的密钥,否则部署多实例时 Token 校验会失败。

实操建议:

立即学习“Python免费学习笔记(深入)”;

  • 安装后,在 settings.py 中配置:SIMPLE_JWT 字典必须显式定义 'ACCESS_TOKEN_LIFETIME' 和 'REFRESH_TOKEN_LIFETIME',单位是 timedelta,例如 timedelta(minutes=15)
  • 加上 'AUTH_HEADER_TYPES': ('Bearer',),否则 Vue 发送 Authorization: Bearer xxx 会被忽略
  • 在 urls.py 中注册路由:path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),并确保该视图返回的 JSON 包含 access、refresh、user_id(需自定义序列化器)
  • 如果 Vue 部署在独立域名(如 app.example.com),Django 必须开启 CORS_ALLOW_CREDENTIALS = True,且前端 Axios 配置 withCredentials: true,否则 Cookie 中的 session 无法共享(虽然 Token 认证不用 Session,但某些调试场景会混用)

为什么登录后 Vue 能拿到 Token 却始终 403 —— 权限类没配对

TokenAuthentication 或 JWTAuthentication 只负责「识别用户是谁」,不等于「允许访问」。如果你在 ViewSet 中写了 permission_classes = [IsAuthenticated] 却没启用认证类,或者用了 SessionAuthentication 但前端没传 sessionid Cookie,就会返回 403 而非 401,让人误以为是权限问题。

实操建议:

立即学习“Python免费学习笔记(深入)”;

  • 检查视图的 authentication_classes 是否显式声明了 [JWTAuthentication](来自 simplejwt)或 [TokenAuthentication](来自 DRF),不能只靠全局配置,局部覆盖容易遗漏
  • 确认 DEFAULT_AUTHENTICATION_CLASSES 在 settings.py 中已替换掉默认的 SessionAuthentication,例如:'rest_framework_simplejwt.authentication.JWTAuthentication'
  • 用 curl 手动测试接口是否生效:curl -H "Authorization: Bearer <your-token>" http://localhost:8000/api/test/</your-token>,排除前端 JS 逻辑干扰
  • 如果用了自定义 Permission 类(比如基于用户角色),确保它继承自 BasePermission 而非 permissions.IsAuthenticated,后者在未认证时返回 401,而前者可能静默拒绝
Vue 侧 Token 刷新逻辑和后端 Token 校验密钥一致性,是最容易被跳过的两个点。尤其上线后换密钥却忘了重发所有活跃 Token,会导致大量用户“莫名登出”。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2483

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6410

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5806

2024.03.19

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1751

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4464

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1709

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

26297

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3187

2023.08.04

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 6.1 官方文档
Django 6.1 官方文档

共0课时 | 0人学习

Django 教程
Django 教程

共28课时 | 9.8万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn