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

使用Django+Djoser登出销毁Token遇401未授权错误求助

Django Token登出401 Unauthorized问题排查

1. Token格式与有效性检查

  • 先在前端控制台打印GlobalState.userToken,确认值是否为空、是否带多余空格或特殊字符。如果userToken本身开头有空格,拼接后会变成Token xxx(两个空格),导致认证格式错误。
  • 验证Token是否已过期或被提前销毁:可以用这个Token请求其他需要认证的接口,比如用户信息接口,如果同样返回401,说明Token本身无效。

2. 请求头缺失CSRF Token

Django默认对POST请求做CSRF验证,你的请求没携带CSRF Token会直接触发401。解决方式:

  • 从Cookie中读取csrftoken值,添加到请求头:
const csrfToken = document.cookie.split('; ').find(row => row.startsWith('csrftoken=')).split('=')[1];

const response = await fetch('http://127.0.0.1:8000/api-auth/token/logout/', {
    method: 'POST',
    headers: {
        'Authorization': 'Token '.concat(GlobalState.userToken),
        'Content-Type': 'application/json',
        'X-CSRFToken': csrfToken
    },
    credentials: 'include' // 跨域场景下需要携带Cookie
});

3. 后端认证配置问题

  • 确认logout视图是否启用了Token认证:如果是自定义视图,需要在类或函数上配置authentication_classes = [TokenAuthentication];如果用第三方库的视图,检查是否正确继承了认证类。
  • 检查urls.py中/api-auth/token/logout/的路由映射是否正确,有没有拼写错误,或者是否映射到了错误的视图函数。

4. 跨域配置遗漏

如果前后端是不同端口/域名,需确保后端配置了CORS:

  • 安装并配置django-cors-headers,在settings.py中设置:
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = [
    'authorization',
    'x-csrftoken',
    'content-type',
]
CORS_ALLOWED_ORIGINS = [
    'http://你的前端域名:端口',
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49