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

使用Django DRF与Simple JWT获取当前用户时认证报错如何处理?

问题根因

  1. JWT认证失败是因为你传递token的方式不符合Simple JWT的默认要求:
    DRF的JWTAuthentication默认只会从请求头里读取认证信息,要求格式为Authorization: Bearer <你获取的access_token>,你当前是把token放在URL参数里传递,认证类识别不到,所以抛出凭证未提供的报错。
  2. 你移除认证、权限配置的做法完全错误,存在极高安全风险:
  • 接口完全失去访问控制,任何人不需要登录就可以直接调用,拉取你所有用户的全量数据,用户隐私完全泄露
  • 你当前视图绑定的是ModelViewSet的list方法,本身返回的是User表的全量用户数据,你测试时误以为返回的是当前用户,只是因为你测试环境只有1个用户而已,生产环境会直接暴露所有用户信息

正确实现方案

  1. 首先恢复你删掉的两行认证、权限配置,这两行是用户身份校验的核心,绝对不能删除。
  2. 调整Postman请求配置:先调用Simple JWT的token获取接口拿到有效access_token,在请求头中添加字段Authorization: Bearer <你的access_token>,不要把token放在URL参数中(URL参数会被服务器日志、代理等记录,本身也不符合安全规范)。
  3. 调整视图和路由逻辑,不要用list接口返回当前用户,单独实现专属的当前用户查询接口,示例代码如下:

视图代码

from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
from .serializers import UserSerializer

class UserViewSet(viewsets.GenericViewSet):
    serializer_class = UserSerializer
    authentication_classes = [JWTAuthentication]
    permission_classes = [IsAuthenticated]

    @action(methods=['get'], detail=False, url_path='current')
    def get_current_user(self, request):
        # 经过JWT认证后,request.user就是当前登录的用户对象,无需全量查询User表
        serializer = self.get_serializer(request.user)
        return Response(serializer.data, status=status.HTTP_200_OK)

路由代码

path('user/current/', UserViewSet.as_view({'get': 'get_current_user'}), name="current-user"),

调整后接口只会返回当前登录用户的个人信息,且只有携带有效JWT token的请求才能访问,完全符合安全要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:42:01