You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF+Vue项目注册接口Chrome返回401 Unauthorized其他浏览器正常问题求助

问题根因分析

你遇到的问题既不是Chrome的特有特性,也不是CORS配置问题,核心原因可以从两个请求头的差异直接定位:

  • Chrome的请求头携带了Authorization: Token acf8b9099de5eba413dea141ce2c06b6cfb03159,而Edge的请求头中Authorization字段为空
  • 你观察到的WWW-Authenticate: Token是后端返回401时的附带响应头,是请求失败的结果,不是原因

这个现象和Django Rest Framework的鉴权逻辑有关:DRF的TokenAuthentication校验逻辑优先级高于权限类校验,只要请求携带了Authorization头,不管接口是否设置了AllowAny权限,都会先校验Token的有效性,Token无效直接返回401,不会走匿名访问逻辑。
你本地Chrome之前大概率登陆过站点,残留了旧的无效Token存储在本地,而Edge中没有对应Token存储,才出现了两个浏览器表现不一致的情况。

解决方案

1. 临时验证方案

打开Chrome开发者工具 -> Application标签页,找到Local Storage、Session Storage目录,删除里面存储的token字段,重新发起注册请求即可正常返回201。

2. 前端永久修复

修改axios全局请求拦截器逻辑,不要无脑给所有请求加Authorization头,针对登陆、注册等不需要鉴权的接口,跳过Token拼接:

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  // 配置不需要鉴权的接口白名单
  const noAuthApiList = ['/api/v1/users/auths/']
  // 仅当存在Token、且当前接口不在白名单中时,才携带Authorization头
  if (token && !noAuthApiList.some(api => config.url.includes(api))) {
    config.headers.Authorization = `Token ${token}`
  }
  return config
})

3. 后端兼容优化

给不需要鉴权的视图显式设置空的鉴权类,DRF就会跳过Token校验逻辑,即便前端误带了无效Token也不会报错:

from rest_framework import viewsets
from rest_framework.permissions import AllowAny

class UserAuthViewSet(viewsets.ModelViewSet):
    # 显式清空鉴权类,跳过所有Token校验
    authentication_classes = []
    permission_classes = [AllowAny]
    # 其余视图逻辑

内容的提问来源于stack exchange,提问作者DorianGray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:00