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

Django Knox认证中如何验证请求头携带的token

方案1:直接使用Knox内置认证类(推荐)

Knox本身已经封装好了完整的token校验逻辑,不需要手动解析请求头的Authorization字段,只需要给需要登录权限的视图配置对应的认证类和权限类即可:

  • 如果是DRF的APIView类视图,直接在视图里加如下配置:
from knox.auth import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

class YourQuizView(APIView):
    # 配置Knox的token认证类
    authentication_classes = (TokenAuthentication,)
    # 配置必须登录的权限
    permission_classes = (IsAuthenticated,)

    def dispatch(self, request, *args, **kwargs):
        self.quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
        # 认证通过后直接可以从request.user拿到当前登录用户
        current_user = request.user
        print(current_user.id, current_user.username)
        return super().dispatch(request, *args, **kwargs)

配置完成后,请求进来时DRF会自动调用Knox的认证逻辑校验token有效性,token无效会直接返回401错误,不需要自己处理校验逻辑。

方案2:手动调用Knox接口校验token

如果你确实有自定义场景需要手动校验提取到的token,可以直接调用Knox的TokenAuthentication类的authenticate_credentials方法完成校验:

from knox.auth import TokenAuthentication
from rest_framework.exceptions import AuthenticationFailed

def dispatch(self, request, *args, **kwargs):
    self.quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
    try:
        auth_method, token = self.request.META['HTTP_AUTHORIZATION'].split(' ', 1)
        # 调用Knox的校验方法,传入提取到的token字符串
        user, auth_token = TokenAuthentication().authenticate_credentials(token.encode())
        # 校验通过,user就是当前登录的用户对象,手动绑定到request上即可
        request.user = user
    except ValueError:
        # Authorization头格式错误
        raise AuthenticationFailed("无效的Authorization头格式")
    except AuthenticationFailed as e:
        # token过期、无效、不存在等情况
        raise AuthenticationFailed(f"认证失败:{str(e)}")
    
    # 后续逻辑可以直接用request.user获取用户信息
    return super().dispatch(request, *args, **kwargs)

注意事项

  • 不需要额外调用login()方法,只要拿到校验通过的user对象,DRF的请求上下文就可以正常识别用户身份
  • 校验过程抛出的AuthenticationFailed异常DRF会自动处理为401响应,符合REST规范
  • Knox的token本身已经实现了过期校验、加密存储等逻辑,不需要自己额外实现校验规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:27:04