2014-09-24 55 views
0

我使用Appcelerator Titanium和Python的Django來創建移動應用程序。正如你可能已經猜到的那樣,Django被用於後端。目前我正在嘗試創建一個需要CSRF令牌才能正確接受數據的登錄表單。我試圖從Django中檢索CSRF令牌,但我嘗試過並失敗了,Google對我沒有任何答案。在Appcelerator Titanium中,我如何獲得Django的CSRF令牌?

問題通常你會得到一個帶有CSRF令牌的HTML頁面,然後發送它。我現在要做的是在不知道CSRF的情況下發送POST消息。在加速器中,我嘗試過運行

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

但是這不起作用,因爲鈦的工作原理。那麼我怎樣才能得到令牌?我是否需要創建特定的URL才能創建會話並顯示CSRF令牌?我只是擔心,一旦我收到令牌,我需要重新連接到服務器,並且令牌已經改變。

在我的谷歌搜索,我發現Drupal有這個功能的網址:services/session/token

是否有在Django此一equivillant?或者我需要創建一個只顯示CSRF令牌的頁面?

回答

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令牌使用所以你可以檢索多次,如果需要

0

如果您使用Titanium創建應用程序,則可以使用SetRequestHeader來設置具有請求的令牌。

希望它有幫助。

+0

是的,像loginHTTP.setRequestHeader(「X-CSRFToken」,Ti.App.Properti es.getString(「csrf」));但這並沒有解釋如何檢索CSRF令牌。不管怎麼說,還是要謝謝你! – 2014-10-02 22:42:49