如何在Django上发出Corona sdk POST请求时获取csrf令牌

时间:2015-03-13 23:59:57

标签: django post request corona csrf

我正在尝试使用Corona SDK将一个JSON数据发送(POST)到Django服务器。但是,我总是得到CSRF令牌错误。

我知道当我从Corona发出帖子请求时,我需要将CSRF令牌发布到django服务器。但问题是我如何才能首先在Corona获得令牌?

根据Django Doc,可以从cookie获取CSRF令牌。 https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#csrf-ajax 也可以使用@csrf_except装饰器。但是我想知道是否有办法在不使用装饰器的情况下解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:2)

  • 也许,您的 APP 无需使用csrf保护。

  • Django是一个Web框架,csrf发生在web sit中,而不是在移动APP中。

  • CSRF:跨站点请求伪造。

  •   

    CSRF利用网站对用户浏览器的信任

  • wiki

  • 您可以在以下文章中看到

  • https://stackoverflow.com/a/25080625/1474823m

答案 1 :(得分:1)

据我所知,你的选择是:

  1. 使用jQuery cookie插件获取前端的csrf标记。您引用的链接为您提供了几乎可以复制的代码。糊。
  2. 在后端编写自定义中间件挂钩以从请求中获取csrf令牌。这比听起来容易,但它有点反直觉,因为csrftoken cookie仅在请求 - 响应周期的响应部分期间在request对象中可用。您需要在名为middleware.py的文件中定义一个类并覆盖process_response

    class CSRFHook(object):
    
        def process_response(self, request, response):
    
            csrf_token = request.COOKIES['csrftoken']
    
            # Do something with csrf_token here
    
            return response
    

    然后将CSRFHook添加到MIDDLEWARE_CLASSES中的settings.py

    MIDDLEWARE_CLASSES = (
        ...
        'middleware.CSRFHook',
    )
    

    您放置自定义中间件MIDDLEWARE_CLASSES的位置并不重要。但请记住,中间件类在请求的一半周期内以自上而下的顺序执行,而在响应的一半中自下而上执行。