【问题标题】:how to obtain csrf token when make a Corona sdk POST request on Django在 Django 上发出 Corona sdk POST 请求时如何获取 csrf 令牌
【发布时间】:2015-05-16 14:54:18
【问题描述】:

我正在尝试使用 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 装饰器。但是我想知道是否有办法在不使用装饰器的情况下解决这个问题?

谢谢。

【问题讨论】:

    标签: django post request coronasdk csrf


    【解决方案1】:
    • 或许,您的APP无需使用csrf保护。

    • django是一个web框架,csrf出现在web sit,而不是手机APP。

    • CSRF:跨站请求伪造。

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

    • wiki

    • 你可以在下面看到这篇文章

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

    【讨论】:

    • 谢谢。我希望消息得到官方确认。我一直在努力解决这个问题。
    • 对此+1。除非您的应用程序涉及使用会话 cookie 对用户进行身份验证,否则您的用户不会容易受到 CSRF 的攻击。为这个视图使用 @csrf_exempt 装饰器可能是你最好的选择
    【解决方案2】:

    据我所知,您的选择是:

    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
      

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

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

      MIDDLEWARE_CLASSES 将自定义中间件放在哪里并不重要。但请记住,中间件类在请求周期的一半中按自上而下的顺序执行,而在响应的一半中按自下而上的顺序执行。

    【讨论】:

    • 1.感谢您的回答。我对创建中间件类真的不太有信心。不是很明白它是如何工作的。 2. 实际上,我很惊讶在这个主题上没有其他更简单的解决方案。人们从不将电晕 SDK 与 Django 一起使用吗????
    • 为您的第一个 cmets 使用 jQuery cookie 插件。电晕有特定的版本吗?我似乎找不到任何东西......
    • 可能不会。我从未与 Corona 合作过,但我想您的解决方案可能取决于您正在开发的平台。您需要为您的平台找到一个允许您提交初始 GET 请求的库。该请求的响应应包含一个 csrftoken cookie。然后,您需要一种从响应中解析出 cookie 的方法。请问,你是为什么平台开发的?
    • corona 是跨平台的。我实际上有2个解决方案。一种是忘记令牌,因为有人说移动请求不需要它。另一种是在服务器中获取令牌并在响应中返回。所以我在响应中得到了令牌,但不是从 cookie 中得到的。不过不确定这是否足够安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2012-05-24
    • 2018-11-02
    • 2018-06-09
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多