我正在尝试使用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装饰器。但是我想知道是否有办法在不使用装饰器的情况下解决这个问题?
感谢。
答案 0 :(得分:2)
也许,您的 APP 无需使用csrf保护。
Django是一个Web框架,csrf发生在web sit中,而不是在移动APP中。
CSRF:跨站点请求伪造。
CSRF利用网站对用户浏览器的信任
您可以在以下文章中看到
答案 1 :(得分:1)
据我所知,你的选择是:
在后端编写自定义中间件挂钩以从请求中获取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
的位置并不重要。但请记住,中间件类在请求的一半周期内以自上而下的顺序执行,而在响应的一半中自下而上执行。