首先,感谢您发布此问题。我有一个类似的要求,即不使用本地存储,而且您的工作方向正确。
查看Knox的
LoginView实现(在此处),似乎有相当数量的逻辑未在您的版本中复制(例如,令牌计数限制)。
我采用了扩展Knox的方法
LoginView。我调用默认
post方法来使用Knox的实现,然后删除我不想在客户端上的JS上获取的信息。
from django.contrib.auth import loginfrom rest_framework import permissionsfrom rest_framework.authtoken.serializers import AuthTokenSerializerfrom knox.views import LoginView as KnoxLoginViewclass LoginView(KnoxLoginView): permission_classes = (permissions.AllowAny,) def post(self, request, format=None): serializer = AuthTokenSerializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] login(request, user) response = super(LoginView, self).post(request, format=None) token = response.data['token'] del response.data['token'] response.set_cookie( 'auth_token', token, httponly=True, samesite='strict' ) return response



