Django Rest Framework Token Authentication不生效该如何解决?
Django REST Framework Token Authentication 不生效解决方案
你当前的问题核心是仅配置了身份认证规则,没有配置接口访问权限限制。DRF 的 authentication_classes 仅负责解析请求携带的 Token 校验用户身份,不会主动拦截未携带有效 Token 的请求,需要配合权限类实现未认证拦截。
方案1:全局配置权限类(所有接口默认需要认证)
修改 settings.py 里的 REST_FRAMEWORK 配置,新增全局权限规则:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication' ], # 新增全局权限配置 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated' ] }
该配置下所有接口默认都需要登录认证,不需要认证的接口可以单独在视图上加 @permission_classes 装饰器指定宽松权限。
方案2:单独给指定视图配置权限类(仅当前接口需要认证)
如果不需要全局限制,仅需要给当前 users_view 接口加权限校验,修改 views.py 的视图装饰器即可:
from rest_framework.permissions import IsAuthenticated @authentication_classes((TokenAuthentication,)) @permission_classes((IsAuthenticated,)) # 新增权限校验装饰器 @api_view(['PUT', 'POST']) def users_view(request): # 原有业务逻辑
生效验证说明
配置完成后符合以下规则:
- 未携带 Token、Token 无效的请求会直接返回 401 Unauthorized 状态码
- 携带有效 Token 的请求会正常进入业务逻辑,
request.user会自动赋值为 Token 对应的用户对象 - 请求头格式需要符合规范:Header 中添加
Authorization: Token 你的有效token值,注意前缀和空格不要写错。
内容的提问来源于stack exchange,提问作者bballboy8
相关产品推荐
相关产品推荐

