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

时间:2019-12-17 14:11:07

标签: django django-rest-framework python-3.7

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

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

f我使用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

为什么?

1 个答案:

答案 0 :(得分:0)

有两个选项。

  1. settings.py

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

    from rest_framework.authentication   import SessionAuthentication
    

在您基于班级的视图中:

    authentication_classes =[SessionAuthentication]