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

Django使用simple_jwt鉴权未传token请求正常通过问题咨询

问题原因

DRF 框架中认证规则和权限规则是两套独立的逻辑,你仅配置了全局JWT认证类,没有配置接口访问权限规则:

  • 认证类仅负责解析请求携带的身份凭证:如果携带的token无效,直接返回401;如果未携带token,只会将请求用户标记为匿名用户,不会主动拦截请求。
  • 你没有配置权限规则时,DRF默认使用AllowAny权限,即匿名用户也可以正常访问所有接口,这就是未带token仍能请求成功的核心原因。

解决方案

你可以根据需求选择以下任意一种方案:

方案1:全局配置所有接口默认需要登录

修改你的settings.py中REST_FRAMEWORK配置,新增默认权限类:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    # 新增默认权限配置:所有接口默认要求登录
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

如果存在无需登录即可访问的接口(如登录、注册接口),单独在对应视图中指定permission_classes = [rest_framework.permissions.AllowAny]即可。

方案2:仅给指定接口添加登录校验

如果不需要全局拦截,仅针对当前SetPin接口做鉴权,直接修改视图代码添加权限属性即可:

from rest_framework.permissions import IsAuthenticated

class SetPin(generics.CreateAPIView):
    """修改或设置pin码"""
    serializer_class = serializers.PinSerializer
    # 新增权限配置:要求必须携带有效token才能访问
    permission_classes = [IsAuthenticated]

配置完成后,未携带Authorization: Bearer token的请求就会被权限校验拦截,返回403/401状态码,和错误token的逻辑保持一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:03