我正在尝试使用 Django Rest Framework 构建单页应用程序。对于身份验证,我使用登录视图来启动会话并要求对所有 api 路由进行 csrf 保护。由于没有进行模板化,因此csrf_token从未使用该标记,因此我必须使用 手动获取令牌get_token。我不想将其放在主视图中给出的主索引文件中,而是想将其设置在自己的 cookie 上。不,这不是 django 提供的 CSRF Cookie,因为它具有 CSRF 秘密,而且我提到我正在使用会话,因此秘密存储在那里。该 cookie 将具有将用于所有变异请求的令牌。
我已经尝试了一切让 django 接受 cookie 但没有任何效果。我第一次可以正常登录,因为没有之前的会话,但此后的任何操作都会抛出错误 403。我尝试使用,ensure_csrf_cookie但没有帮助。我尝试不进行会话,但仍然一无所获。我什至尝试重新排列中间件顺序,但仍然一无所获。我什至尝试了自己的自定义中间件来创建 cookie,但它不起作用。这是我现在得到的代码:
视图.py
@api_view(http_method_names = ["GET"])
def home(request):
"""API route for retrieving the main page of web application"""
return Response(None, status = status.HTTP_204_NO_CONTENT);
class LoginView(APIView):
"""API endpoint that allows users to login"""
def post(self, request, format = None):
"""API login handler"""
user = authenticate(username = request.data["username"], password = request.data['password']); …Run Code Online (Sandbox Code Playgroud)