DRF中IsAuthenticated未生效最常见的原因是权限类未正确注册到视图或全局配置必须显式声明permission_classes[IsAuthenticated]且多个权限类需全部返回True才通过顺序不可颠倒。DRF里IsAuthenticated为什么没生效最常见的原因是权限类没正确注册到视图或全局配置里而不是代码写错了。DRF默认不启用任何权限IsAuthenticated必须显式声明才会起作用。全局配置写在settings.py的REST_FRAMEWORK[DEFAULT_PERMISSION_CLASSES]里但一旦写了所有视图都受约束——包括APIView、ViewSet甚至未登录时的登录接口本身容易导致401循环更安全的做法是只在具体视图上加permission_classes [IsAuthenticated]尤其适合混合权限场景比如列表页公开、详情页需登录注意如果视图继承自APIView必须用permission_classes属性若用ViewSet同样适用但动作级控制得靠get_permissions()方法自定义BasePermission怎么写才不踩坑核心就一条has_permission(self, request, view)返回True或False别抛异常、别返回字符串、别漏写self——这是最常被复制粘贴错的地方。判断逻辑里别直接访问request.user而忘了检查is_authenticated未登录用户request.user是AnonymousUser它没有is_active等属性会抛AttributeError需要对象级权限时比如编辑某条订单必须实现has_object_permission(self, request, view, obj)且视图得调用get_object()触发它——单纯list()不会走这个方法多个权限类同时存在时DRF按顺序执行**全部返回True才算通过**所以别把IsAuthenticated和自定义类顺序搞反否则未登录就直接短路失败IsAuthenticated和自定义权限能一起用吗能而且推荐这么用用IsAuthenticated兜底身份再用自定义类做业务判断。但要注意组合方式不是“或”而是“与”。 知网AI智能写作 知网AI智能写作写文档、写报告如此简单