2016-01-13 91 views
0

我在此處跟隨文檔TokenAuthentication,並且已經爲每個用戶創建了令牌。但是我不知道如何在javascript中獲取令牌?例如,我想發表評論,使用阿賈克斯像如何在Django Rest Framework中使用javascript獲取令牌TokenAuthentication

$.ajax({ 
     url: "/api/comment/", 
     type: "POST", 
     datatype: "json", 
     data: {"reply_id": "1", csrfmiddlewaretoken: "{{ csrf_token }}", and token here?}, 
}); 

但我怎麼能得到當前用戶的令牌? cookies已設置http-only,我無法訪問它。也許我應該通過使用用戶名(我在我的網站上顯示)首先搜索數據庫來發送另一個Ajax來獲取令牌?

歡迎任何幫助,謝謝。

編輯:我應該使用localStorage嗎?

+0

你還允許'SessionAuthentication'嗎?如果是這樣,那麼你根本不需要傳遞令牌.. – mariodev

+0

@mariodev,我不確定在web和TokenAuthentication中使用SessionAuthentication是否好用於移動應用程序? – Windsooon

+0

這是一個遵循的標準做法。 'SessionAuthentication'最適合'TokenAuthentication'用於移動設備的網絡應用。如果您同時設置了DRF的設置,它將同時處理Web和移動認證流程。 – mariodev

回答

0

您首先需要通過使用用戶憑據登錄來檢索身份驗證令牌。然後,您將擁有一個身份驗證令牌,您可以將其存儲在localStorage中。

用於登錄的JS代碼大致如下所示;

var credentials = { 
    username: "admin", 
    password: "abc123" 
}; 

$.post("http://localhost:8000/api-token-auth/", credentials, function(auth) { 
    console.log("Logged in, auth token: ", auth.token); 
} 
+0

在localStorage中存儲是更好的方法嗎?我在這裏讀過一篇文章https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ – Windsooon

+0

我用localStorage作爲例子,因爲我認爲問題是關於獲取實際的令牌而不是存儲它。 Stormpath確實更喜歡存儲** Json Web Tokens(JWT)**安全cookes over localStorage,儘管JWT的本質上相當安全(這就是爲什麼JWT.io不喜歡存儲方法)。 但是,如果您希望使用JWT,則使用普通身份驗證令牌,您需要使用http://getblimp.github.io/django-rest-framework-jwt/應用程序。 如果您希望繼續使用普通身份驗證令牌,則可以考慮對其進行計時(重新生成它們)以提高安全性。 –

相關問題