2017-02-04 23 views
0

У меня есть сайт wordpress (закодированный с PHP), который я использую для отправки данных в представление django. Я отправляю с этим кодомcsrf_exempt decorator не освобождает

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $myvars); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, 'https://mydjangosite.com/blah/blah2/'); 

Функцией URL-адрес выше идет к использует @csrf_exempt декоратора, потому что я хочу, чтобы межсайтовый пост в этом случае

from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
@api_wrapper 
def add_referral_api(request, status_slug): 

Однако, я все еще получаю это ошибка в моих журналах

[03/Feb/2017 18:17:48] WARNING [django.request:177] Forbidden (CSRF cookie not set.): 

Как разрешить такую ​​перекрестную проводку между надежными сайтами?

EDIT Мои классы Middleware - это как таковые. Обратите внимание, что этот сайт использует сертификат ssl, для чего он стоит, и я подозреваю, что дополнительная безопасность вызывает у дизайнера csrf_exemption неработоспособность, как я надеюсь. Еще я хотел бы как-то сказать, что этот сайт (мой сайт WP) подходит для получения почтовых данных.

MIDDLEWARE_CLASSES = (
    # This middleware is for ensuring that all pages use https 
    #'djangosecure.middleware.SecurityMiddleware', 
    'django.middleware.gzip.GZipMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'common.middleware.XsSharing', 
    'impersonate.middleware.ImpersonateMiddleware', 
    'referrals.middleware.ReferralMiddleware', 
) 
+0

Что делает «api_wrapper»? Вы уверены, что эта точка зрения попала? –

+0

Да. То, что он делает, - это опубликовать информацию и добавить записи в базу данных. –

+0

У вас есть шанс, что параметр 'CSRF_COOKIE_SECURE' установлен на' True'? –

ответ

0

Поговорив с Мэттом, мы обнаружили виновника быть @api_wrapper декоратора (так, моя первоначальная интуиция была права), как это было вызовом @ensure_csrf_token декоратора, отдавая @csrf_exempt бесполезно. PHP-вызов дал Bad Request (400), но это выходит за рамки этого вопроса.