Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从iPhone应用程序向我的post请求添加csrf_令牌_Python_Iphone_Django_Django Csrf - Fatal编程技术网

Python 从iPhone应用程序向我的post请求添加csrf_令牌

Python 从iPhone应用程序向我的post请求添加csrf_令牌,python,iphone,django,django-csrf,Python,Iphone,Django,Django Csrf,我有一个iPhone应用程序,我想从中调用一个post服务,在其请求中传递参数,这样做会导致服务器错误500 我已经阅读了Django文档,但仍然没有弄清楚如何获取csrf_令牌,以及如何将其添加到AFHTTPRequestOperationManager POST方法中 在服务器端,我在middleware\u CLASSES部分添加了django.middleware.csrf.CsrfViewMiddleware,但它似乎没有起到作用 我的看法是这样的,;我做的不多,只是希望通过考试 fr

我有一个iPhone应用程序,我想从中调用一个post服务,在其请求中传递参数,这样做会导致服务器错误500

我已经阅读了Django文档,但仍然没有弄清楚如何获取
csrf_令牌
,以及如何将其添加到
AFHTTPRequestOperationManager POST
方法中

在服务器端,我在
middleware\u CLASSES
部分添加了
django.middleware.csrf.CsrfViewMiddleware
,但它似乎没有起到作用

我的看法是这样的,;我做的不多,只是希望通过考试

from django.core.context_processors import csrf
from django.shortcuts import render_to_response

def foo(request):
   c={}
   c.update(csrf(request))
   if request.method == 'POST':
        return HttpResponseRedirect("Post received");

Django CSRF中间件使用cookie、表单等向页面发送代码,然后确保正确的页面就是发送信息的页面。在这两种情况下,您都必须向服务器发出GET请求,如果您正确安装了中间件,它会将CSRF令牌放入cookie中

查看更多关于此的信息

现在,我注意到您正在使用一个使用NSURLConnection的库,所以它应该可以为您处理cookies。我得到了这个代码包(未测试),它允许您提取您在设置文件中指定的cookie名称(同样,请查看上面的文档链接),然后将其放在您的帖子中

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: networkServerAddress];
for (NSHTTPCookie *cookie in cookies) 
{
    // get the right cookie
}
当然,如果你只是发帖子而从来没有获得第一,你就没有CSRF令牌可以发送

这就是为什么我们有@csrf_豁免标签。()99%的时间都是这样,因为大多数应用程序在发布前都不会执行GET。(在网页中,您必须先执行GET-first)。请注意,这仅适用于应用程序仅发送帖子且没有会话的情况。当你使用它时,你真的需要考虑你自己的安全性,以及你如何验证一个给定的应用程序/用户真的是他们声称的那个人。以及如何禁止人们通过网络浏览器点击此URL


TLDR:可能在视图中使用@csrf\u emption,但要小心。

您的标记中有
{%csrf\u token%}
吗?@TehTris我没有任何模板,所以没有表单URL.py models.py和views.py您试图查看的视图定义是什么样子的?据我所知,
{%csrf_token%}
在HTML呈现过程中的某个地方(如表单中)是必需的,如果它对csrf大喊大叫的话tokens@TehTris我已经用视图更新了问题,我也理解令牌应该嵌入到请求中,这就是为什么我问如何获取令牌,如何将其添加到AFHTTPRequestOperationManager POSTAs中我提到我阅读了实施步骤的文档,但它不起作用我甚至在我的问题中有一个链接:)每个都会返回不同的csrf还是整个程序中都是相同的csrf?我看到了文档链接,但是我链接的关于AJAX的部分专门解释了cookie是如何设置的以及您需要如何使用它。请注意有关调用sure_csrf_cookie()的部分。Django在登录时设置令牌,我相信在登录之后任何时候都不会设置。你如何使用这些电话?是有GET请求,还是只是发布到API?我没有使用AJAX,这些只是我的iPhone应用程序的API POST