在Appcelerator Titanium中,我如何获得Django的CSRF令牌?

时间:2014-09-24 17:17:18

标签: python django titanium csrf appcelerator

我使用Appcelerator Titanium和Python的Django来创建移动应用程序。正如您可能已经猜到的那样,Django正被用于后端。目前,我正在尝试创建一个登录表单,该表单需要CSRF令牌才能正确接受数据。我试图从Django中检索CSRF令牌,但我已经尝试过并且失败了,Google对我没有任何答案。

问题通常是您获得一个包含在表单中的CSRF令牌的HTML页面,然后发送它。我现在要做的是在不知道CSRF的情况下发送POST。在appcelerator中,我尝试过运行

HTTPSession.open(GET, *url*)
token = HTTPSession.getRecievedHeaders("X-CSRF-TOKEN")
HTTPSession.open(POST, *url)
HTTPSession.getRecievedHeaders("X-CSRF-TOKEN", token)
HTTPSession.send(data)

但由于Titanium的工作方式,这不起作用。那么如何获得令牌呢?我是否需要创建特定网址才能创建会话并显示CSRF令牌?我只是担心,一旦我收到了令牌,我就需要重新连接到服务器并且令牌会发生变化。

在我的Google搜索中,我发现Drupal在网址上有一个功能:services/session/token

Django中是否存在等价物?或者我是否需要创建自己的页面才能显示CSRF令牌?

2 个答案:

答案 0 :(得分:0)

如果您使用Titanium进行应用创建,则可以使用SetRequestHeader来设置带有请求的令牌。

希望它有所帮助。

答案 1 :(得分:0)

我需要在Django中创建自己的函数来实现这一目标,但我终于让它工作了!

function getCSRF() {
    var csrfHTTP = Ti.Network.createHTTPClient({
        onload : function() {
            Ti.App.Properties.setString("csrf", this.responseText);
        }
    });
    csrfHTTP.open("GET", "http://website.com/api/csrftoken/");
    csrfHTTP.send();
}

然后通过

检索它
Ti.App.Properties.getString("csrf")

并使用它:

loginHTTP.setRequestHeader("X-CSRFToken", Ti.App.Properties.getString("csrf"));

连接到网站一次在Django中创建一个会话,同时为该特定IP创建一个csrf令牌,以便在需要时多次检索