如果我在restframe-work中不使用SessionAuthentication,如何将CSRF身份验证添加到restframe的所有视图方法?

问题描述 投票:0回答:1

csrftoken不会自动添加到restframe工作的APIView中。默认情况下,它在SessionAuthentication中使用。但是ssionAuthentication是不安全的,因此我使用应该编写的TokenAuthentication。然后我应该如何将csrf身份验证添加到restframe的APIView的POST方法中?

我在HTML或{“ X-CSRFToken”:'{{csrf_token}}'}中添加{%csrf_token%}但是我在请求cookie和POST数据以及标头中都没有发现csrftoken的痕迹。默认的django csrf中间件不起作用吗?我应该自己编写中间件吗?

如果我使用View,以下是收到的request.COOKIES,request.POST,request.META.get(“ HTTP_X_CSRFTOKEN”)

{}
<QueryDict: {'username': ['xx'], 'password': ['123'], 'remember': ['false']}>
None

如果我使用API​​View,

{'csrftoken': 'syyAdWYJMk1xVJ7OS02jJU0S4J345YxlvbBnxPPXGz3Iw7wU2laqd7xgDla0xl8e'}
<QueryDict: {'username': ['xx'], 'password': ['123'], 'remember': ['false']}>
GmwhLBtnLbKjzUwSUtaGHpMfe9U0LWoEJZz45ukBFqMuaiVY4OiNbCjDNL1WdjZx

为什么?

django django-rest-framework python-3.7
1个回答
0
投票

有两个选项。

  1. settings.py

    REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.SessionAuthentication',
        ),
    }
    
  2. 在每个视图中>

    from rest_framework.authentication   import SessionAuthentication
    
  3. 在您基于班级的视图中:

    authentication_classes =[SessionAuthentication]
© www.soinside.com 2019 - 2024. All rights reserved.