2017-02-04 56 views
0

我有一个WordPress数据网站(用PHP编码),我用它来发布数据到Django视图。我发布这个代码csrf_exempt装饰不豁免

$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/'); 

功能上面的网址去使用@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.): 

如何允许在可信站点之间进行这种跨站点发布?

编辑 我的中间件类是这样的。请注意,该站点使用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),但这不在这个问题的范围之内。