1

我遇到了一个奇怪的情况,我登录网站并尝试提交表单,如果我使用 permission_classes = [AllowAny] 或 isAuthenticate 类我得到错误 CSRF Failed: CSRF token missing or incorrect

在以下情况下,它会弹出一个输入密码和用户名的窗口。我的全班就像

class AddReview(APIView):
    serializer_class = ReviewSerializer
    authentication_classes = (BasicAuthentication,)
    def post(self, request):  
        rest = request.POST.get('restaurant')
        dish = request.POST.get('dish')

我的settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',

    ),
}

我只想提交一个自定义表单来提交数据。任何使问题变得好的帮助或建议都会受到高度重视。

更新

我可以使用这个提交表格

class SessionAuthentication(SessionAuthentication):
    def enforce_csrf(self, request):
        return

但是为什么我要强制执行呢?我做错了什么?

4

1 回答 1

0

理想情况下,您的网站表单应该有一个 csrf 令牌,并且也应该发送到服务器。也许是这样的:

<form method="post">{% csrf_token %}</form>
  1. CSRF 中间件在设置中默认被激活MIDDLEWARE
  2. 如果你想禁用 CSRF 保护,只需几个视图使用csrf_exempt()装饰器

参考

https://docs.djangoproject.com/en/2.2/ref/csrf/#csrf-protection-should-be-disabled-for-just-a-few-views

https://docs.djangoproject.com/en/2.2/ref/csrf/

于 2019-09-16T20:09:19.353 回答