Django CSRF cookie не установлен при 403 ошибке для URL веб-хука
Я столкнулся с проблемой CSRF-защиты Django при попытке работы с веб-хуками Stripe на моем локальном хосте. Я получаю ошибку 403 Forbidden с сообщением "CSRF cookie not set." Ошибка возникает при попытке доступа к URL /collect-stripe-webhook/, который предназначен для обработки входящих webhook-запросов от Stripe.Also the payments go through and payment is successfull
urls.py
urlpatterns = [
path('subscribe/', product_list, name='product_list'),
path('create-checkout-session/<int:product_id>/', create_checkout_session, name='create_checkout_session'),
path('collect-stripe-webhook/', stripe_webhook, name='stripe_webhook'), # Updated path
path('success/', TemplateView.as_view(template_name="subscriptions/success.html"), name='success'),
path('cancel/', TemplateView.as_view(template_name="subscriptions/cancel.html"), name='cancel'),
]
views.py:
@csrf_exempt
def stripe_webhook(request):
"""
View to handle Stripe webhooks.
"""
payload = request.body
sig_header = request.META.get('HTTP_STRIPE_SIGNATURE', None)
endpoint_secret = settings.STRIPE_WEBHOOK_SECRET
if not sig_header:
logger.error("No signature header found in the request")
return JsonResponse({'status': 'invalid request'}, status=400)
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
except ValueError as e:
logger.error(f"Invalid payload: {e}")
return JsonResponse({'status': 'invalid payload'}, status=400)
except stripe.error.SignatureVerificationError as e:
logger.error(f"Invalid signature: {e}")
return JsonResponse({'status': 'invalid signature'}, status=400)
if event['type'] == 'checkout.session.completed':
session = event['data']['object']
handle_checkout_session(session)
return HttpResponse(status=200)
Шаблон:
<form action="{% url 'subscriptions:create_checkout_session' product.id %}" method="POST">
{% csrf_token %}
<button type="submit">Subscribe</button>
</form>
Сообщение об ошибке:
Forbidden (CSRF cookie not set.): /collect-stripe-webhook/
Вопрос:
Что может быть причиной этой проблемы с CSRF-защитой Django, и как я могу решить ее, чтобы успешно работать с веб-хуками Stripe?