gpt4 book ai didi

reactjs - django-rest-knox 与 cookie

转载 作者:行者123 更新时间:2023-12-03 13:45:09 26 4
gpt4 key购买 nike

我有一个关于使用 django-rest-knox 进行身份验证的问题。我想在客户端使用 cookie 存储,而不是 localStorage。所以我将像下面这样实现


class LoginView(GenericAPIView):
serializer_class = LoginSerializer
permission_classes = (AllowAny,)

def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data
token = AuthToken.objects.create(user)
response = Response({
'user': UserSerializer(user, context=self.get_serializer_context()).data,
'token': token
})
response.set_cookie('token',
token,
httponly=True)
return response

使用 django-rest-knox 的方法正确吗?或者我需要使用localStorage吗?我不想使用 JWT,因为我在这里看到了很多负面意见。

最佳答案

首先,感谢您提出这个问题。我有类似的要求,不使用本地存储,并且您的工作得到了正确的方向。

看看 Knox 的 LoginView 实现 ( here ),看起来有相当多的逻辑没有在您的版本中复制(例如, token 计数限制)。

我采用了扩展 Knox 的 LoginView 的方法。我调用默认的 post 方法来使用 Knox 的实现,然后删除我不希望客户端上的 JS 可用的信息。

from django.contrib.auth import login
from rest_framework import permissions
from rest_framework.authtoken.serializers import AuthTokenSerializer
from knox.views import LoginView as KnoxLoginView


class 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

关于reactjs - django-rest-knox 与 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com