我想知道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
这个,还是仅仅打开一个安全漏洞?顺便说一句,我甚至尝试过豁免这个功能,但它仍然会抛出那个错误。
有什么建议吗?
答案 0 :(得分:2)
我终于设法通过了POST。我很确定我已经测试了它,但它现在似乎工作了:我在csrf_exempt
中加了一个urls.py
。
from django.views.decorators.csrf import csrf_exempt
url(r'^payment/webhook$', csrf_exempt(paymentwebhook), name='payment-webhook')
任何其他方式因某种原因对我不起作用。感谢nik_m的帮助,感激不尽!
答案 1 :(得分:0)
为我解决
@csrf_exempt
@api_view(['POST'])
def add(request):
答案 2 :(得分:0)
简单。导入csrf_exempt:
from django.views.decorators.csrf import csrf_exempt
然后添加装饰器:
@csrf_exempt
def your_function(request):
...
我将此用于我的付款网络挂钩,这不是问题。如果您特别担心安全性,可以从请求中获取IP地址,并且仅在Webhook与您的付款提供商IP匹配时才对其进行处理。通常从他们的网站/ api文档获得。
答案 3 :(得分:-1)
您应该使用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):
# ...
或者,基于this,您可以将其清除为:
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):
# ...