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

Django REST Framework默认BasicAuthentication配置未生效问题

问题核心原因

你混淆了DRF中**认证(Authentication)和权限(Permission)**的作用:

  • 认证类只负责校验请求携带的身份凭证是否有效,确定当前请求的用户身份,本身不会阻止未认证用户访问
  • 权限类才会根据用户身份判断是否允许访问接口,DRF默认的全局权限类是rest_framework.permissions.AllowAny,也就是允许所有用户无论是否认证都能访问,这就是你配置了认证依旧不需要登录就能访问的核心原因。

修复方案

你需要在settings.py的REST_FRAMEWORK配置中添加全局权限类配置,示例如下:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        # 若需要支持DRF自带网页界面的登录功能,可额外补充SessionAuthentication
        'rest_framework.authentication.SessionAuthentication',
    ],
    # 新增全局权限配置,要求所有接口必须登录才能访问
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

如果仅需要部分接口要求登录,可以不在全局配置权限类,单独在对应视图上指定权限类即可:

from rest_framework.permissions import IsAuthenticated

class StudentView(generics.ListCreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    # 单独指定当前视图的权限要求即可,你之前单独加认证类不生效的原因也是没有配置对应权限限制
    permission_classes = [IsAuthenticated]

异常排查项

如果配置后依旧不生效,可优先检查两点:

  • 确认settings.py中没有重复定义REST_FRAMEWORK配置,后定义的配置会覆盖之前的内容
  • 清除浏览器缓存,或用接口测试工具不带认证信息请求接口,确认是否返回401/403状态码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:06