我使用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令牌?
答案 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令牌,以便在需要时多次检索