使用Admin Token创建用户遇Unauthorized问题(Django+React)
可能的原因及排查步骤
1. 验证Admin Token的有效性与权限
- 确认
localStorage中的token属于管理员账号:
在浏览器控制台执行localStorage.getItem('token'),复制token到JWT解析工具查看payload内容,检查是否包含管理员标识(如is_staff: true或is_superuser: true)。若没有,需用管理员账号重新登录获取有效token。
同时检查exp字段(过期时间戳),确认token未过期。
2. 检查前端请求头格式
- 确认
Authorization请求头格式正确:必须是Bearer+ token(注意Bearer后有空格)。可在浏览器开发者工具的Network面板查看实际发送的请求头,验证格式无误。你的前端代码中已正确拼接该字段,但需确认实际发送时无额外空格或字符。
3. 后端Django权限与认证配置检查
- 视图权限限制:确保处理用户创建的视图已添加管理员权限校验:
# 基于函数的视图 from rest_framework.permissions import IsAdminUser from rest_framework.decorators import permission_classes, api_view @api_view(['POST']) @permission_classes([IsAdminUser]) def create_user(request): # 用户创建逻辑 pass # 基于类的视图 from rest_framework.views import APIView class UserCreateView(APIView): permission_classes = [IsAdminUser] def post(self, request): # 用户创建逻辑 pass - 全局认证配置:在
settings.py中确认REST framework启用了正确的认证类,并设置默认权限为已认证:REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } - Token解析逻辑:若自定义了JWT解析逻辑,需确保正确从请求头提取token,并能准确识别用户的管理员身份。
4. 排查CORS配置(可选)
- 若后端CORS未允许
Authorization请求头,会导致token无法被后端接收。在settings.py的CORS配置中添加:CORS_ALLOW_HEADERS = [ 'authorization', # 其他需要允许的请求头 ]
5. 查看后端日志定位问题
- 检查Django后端的日志,对应请求的错误信息会明确说明是token无效、用户无权限还是其他问题,这是最直接的排查方式。
内容的提问来源于stack exchange,提问作者Amen Befekadu
相关产品推荐
相关产品推荐

