我正在使用 Django-rest-framework 和 Django-rest-knox 构建一个带有身份验证实现的 rest API,并且在前端我使用的是 React.js。我想将身份验证令牌安全地存储在前端,我知道最好的方法是使用 httponly cookie,所以我在我的代码中使用了它:
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
此代码完美运行,因此它发送一个 Set-Cookie 标头并创建一个 httponly cookie。但问题是,如果 JavaScript 无法访问这些 cookie,我如何使用 Authorization 标头从 react 和 axios 访问受保护的路由。