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

后端采用Djoser认证,Angular请求/account/me/返回401未授权错误

解决Angular调用Djoser /account/me/ 401未授权问题

Postman能正常请求但Angular客户端返回401,核心问题基本出在请求头传递或跨域配置上,咱们一步步排查解决:

1. 先确认Authorization头格式是否正确

Djoser默认采用Token认证,Authorization头的格式必须是 Token <你的token值>——注意Token后面必须有一个空格!你可以在Angular代码里加个日志,确认头的格式:

// 打印请求头验证格式
const token = localStorage.getItem('auth_token'); // 假设你把Token存在localStorage里
const headers = new Headers({
  'Content-Type': 'application/json',
  'Authorization': `Token ${token}`
});
console.log('当前请求头:', headers);

2. 检查Angular是否正确携带了认证头

不同版本的Angular Http模块写法有差异,要确保头被正确传入请求配置:

老版本Http模块写法

import { Http, Headers, RequestOptions } from '@angular/http';

// 服务中的请求方法
getUserProfile() {
  const token = localStorage.getItem('auth_token');
  const headers = new Headers({
    'Content-Type': 'application/json',
    'Authorization': `Token ${token}`
  });
  const options = new RequestOptions({ headers: headers });
  return this.http.get(homeUrls.me, options)
    .map(res => res.json());
}

新版本HttpClient模块写法

import { HttpClient, HttpHeaders } from '@angular/common/http';

// 服务中的请求方法
getUserProfile() {
  const token = localStorage.getItem('auth_token');
  const headers = new HttpHeaders({
    'Content-Type': 'application/json',
    'Authorization': `Token ${token}`
  });
  return this.http.get(homeUrls.me, { headers: headers });
}

3. 排查跨域(CORS)配置问题

Postman不受浏览器同源策略限制,但Angular在浏览器中运行会受影响。如果前后端域名不同,需要在Django后端配置CORS允许携带认证头:

  • 先安装依赖:pip install django-cors-headers
  • 在settings.py中添加配置:
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware', # 要放在CommonMiddleware前面
    'django.middleware.common.CommonMiddleware',
    ...
]

# 生产环境建议指定具体域名,这里先允许所有来源测试
CORS_ALLOW_ALL_ORIGINS = True
# 允许携带认证凭证(关键!)
CORS_ALLOW_CREDENTIALS = True
# 允许的请求头列表
CORS_ALLOW_HEADERS = [
    'Authorization',
    'Content-Type',
    ...
]

4. 验证Token是否有效

你可以把Angular当前使用的Token复制到Postman里测试,如果Postman也返回401,说明Token已经过期或无效,需要重新登录获取新的Token。

5. 确认Djoser的后端认证配置

确保Django的settings.py中已经配置了正确的认证类:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        ...
    ),
}

并且已经执行过python manage.py migrate来创建Token数据表。

最后建议你打开浏览器开发者工具的Network标签,查看Angular发送的请求详情——直接看实际请求头里有没有Authorization字段,以及字段值是否正确,这是最直接的排查方式!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:24