Django Forbidden (CSRF cookie not set.)



我想知道 Django 一直向我抛出的CSRF Cookie not set错误是怎么回事。我创建了一个视图(见下文(,它是付款的回调。我对发送到该观点的内容没有影响。我已经检查了StackOverflow上的其他帖子,但我认为任何帖子都不适用于我。他们中的大多数人都可以在他们的表格中实施CSRF保护,csrf_exempt他们的观点,或者他们使用rest_framework。

class PaymentWebhook(View):
    def post(self, request, *args, **kwargs):
        # ...

现在,每次对这个函数不做任何事情时,我都会收到此错误:

Forbidden (CSRF cookie not set.): /payment/webhook

既然这是关于付款的,我可以csrf_exempt这个,还是只是打开一个安全漏洞?顺便说一句,我什至尝试过对这个函数进行豁免,但它仍然抛出该错误。有什么建议吗?

我终于设法通过了一个 POST。我很确定我已经测试过它,但它现在似乎有效:我在urls.py放了一个csrf_exempt.

from django.views.decorators.csrf import csrf_exempt
url(r'^payment/webhook$', csrf_exempt(paymentwebhook), name='payment-webhook')

出于某种原因,任何其他方式都对我不起作用。感谢nik_m的帮助,感激不尽!

你应该用csrf_exempt装饰dispatch方法,像这样:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
class PaymentWebhook(View):
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(PaymentWebhook, self).dispatch(request, *args, **kwargs)  # for python 2
        return super().dispatch(request, *args, **kwargs)  # for python 3
    def post(self, request, *args, **kwargs):
        # ...

或者,基于此,您可以将其清理为:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt, name='dispatch')
class PaymentWebhook(View):
    def post(self, request, *args, **kwargs):
        # ...
这是我

所做的(导入csrf_exempt(

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@api_view(['POST'])
def add(request):

很简单。导入csrf_exempt:

from django.views.decorators.csrf import csrf_exempt

然后添加修饰器:

@csrf_exempt def your_function(request): ...

我将其用于我的付款网络钩子,这不是问题。如果您特别担心安全性,您可以从请求中获取 IP 地址,并且仅在与您的支付提供商 IP 匹配时才处理 webhook。通常从他们的网站/api 文档中获得。

最新更新