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

Django使用Knox Token时如何在自定义函数中通过token获取用户对象

Django Knox 函数视图获取token对应用户的实现方案

完全可以在自定义函数视图中获取token对应的用户,这里提供两种常用的实现方式:

方案1:搭配DRF装饰器(推荐)

Knox 本身和 Django REST Framework 的认证体系完全兼容,你可以直接用DRF提供的函数视图装饰器复用类视图的认证逻辑,不需要自己处理token校验:

  1. 先在settings.py中配置全局默认认证类(如果还没配置的话):
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication',),
}
  1. 给你的自定义函数加上对应装饰器即可:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

# 参数为视图支持的请求方法,根据你的业务需求调整
@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
def dashboard(request):
    # 直接通过request.user即可拿到当前token对应的用户,和类视图用法完全一致
    current_user = request.user
    # 你的业务逻辑
    return Response({
        "username": current_user.username,
        "email": current_user.email
    })

前端请求时需要在请求头中携带Authorization: Token <生成的knox token>即可正常完成认证。

方案2:原生Django视图手动解析token

如果你使用的是纯原生Django函数视图,不想引入DRF的装饰器,可以手动解析请求头中的token匹配用户:

from django.utils import timezone
from django.http import JsonResponse
from knox.models import AuthToken

def dashboard(request):
    # 读取请求头中的认证信息
    auth_header = request.META.get('HTTP_AUTHORIZATION', '')
    if not auth_header.startswith('Token '):
        return JsonResponse({"error": "缺少认证凭证"}, status=401)
    
    # 提取token值
    token_value = auth_header.split(' ')[1]
    # Knox仅存储token的前8位作为查询索引,直接匹配前8位即可
    try:
        auth_token = AuthToken.objects.get(token_key=token_value[:8])
    except AuthToken.DoesNotExist:
        return JsonResponse({"error": "无效的认证凭证"}, status=401)
    
    # 校验token是否过期
    if auth_token.expiry < timezone.now():
        return JsonResponse({"error": "认证凭证已过期"}, status=401)
    
    # 拿到token对应用户
    current_user = auth_token.user
    # 你的业务逻辑
    return JsonResponse({
        "username": current_user.username,
        "email": current_user.email
    })

注意:方案1更推荐使用,官方已经处理了所有token校验、过期、加密匹配的安全逻辑,手动实现容易出现安全漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:04