一.Token的來源:
當客戶端多次向服務端請求數據時,服務端就需要多次從數據庫中查詢用戶名和密碼並進行對比,判斷用戶名和密碼是否正確,並作出相應提示。但這樣無疑會增加服務器端的運行壓力,是否可以有一種方式只需要驗證用戶就是之前的用戶而不需要每次在客戶端請求數據時都需要查詢數據庫判斷用戶名和密碼是否正確。在這種請求下,引入了token來解決服務器端多次訪問數據庫問題。
1.什麼是Token:
Token是服務端端生成的一串字符串,作爲客戶端進行請求時辨別客戶身份的的一個令牌。當用戶第一次登錄後,服務器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。
2.使用Token的目的:
Token的目的是爲了驗證用戶登錄情況以及減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。
二. Token的運用流程:
-
當用戶首次登錄成功之後, 服務器端就會生成一個 token 值,這個值,會在服務器保存token值(保存在數據庫中),再將這個token值返回給客戶端;
-
服務器端有一個專門的保存用戶登錄的表,其中有 token 字段,用戶每次登錄都會更新表中token字段;
-
客戶端拿到 token 值之後,進行保存 (保存位置由服務器端設置);
-
以後客戶端再次發送網絡請求(一般不是登錄請求)的時候,就會將這個 token 值附帶到參數中發送給服務器.;
-
服務器接收到客戶端的請求之後,會取出token值與保存在本地(數據庫)中的token值進行比較;
-
如果兩個 token 值相同, 說明用戶登錄成功過!當前用戶處於登錄狀態;
-
如果沒有這個 token 值, 沒有登錄成功;
-
如果 token 值不同: 說明原來的登錄信息已經失效,讓用戶重新登錄;
-
Django Rest framework中JWT的使用稍有差異,這裏不做詳細說明。