溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django使用JWT保存用戶登錄信息的方法

發(fā)布時間:2020-08-01 11:26:54 來源:億速云 閱讀:308 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了django使用JWT保存用戶登錄信息的方法,內(nèi)容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

什么是JWT?

Json web token (JWT), 是為了在網(wǎng)絡應用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

JWT最普遍的一個作用就是用來保存用戶的登錄信息。

JWT的流程

django使用JWT保存用戶登錄信息的方法

1.簽發(fā)JWT

在用戶正確輸入賬號密碼成功登錄后,服務端就會簽發(fā)JWT。

django使用第三方庫djangorestframework-jwt生成JWT,所以先安裝第三方包。

pip install djangorestframework-jwt

然后需要在django的配置上增加:

REST_FRAMEWORK = {
 'DEFAULT_AUTHENTICATION_CLASSES': (
  'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # jwt認證
  'rest_framework.authentication.SessionAuthentication',    # 管理后臺使用
  'rest_framework.authentication.BasicAuthentication',
 ),
 ...
}

JWT_AUTH = { # 導包: import datetime
 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # jwt有效時間
}

然后就可以簽發(fā)JWT了。

from rest_framework_jwt.settings import api_settings

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER # 生payload部分的方法
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER # 生成jwt的方法

# {'exp': xxx, 'email': '', 'user_id': 1, 'username': 'admin'}
# user:登錄的用戶對象
payload = jwt_payload_handler(user) # 生成payload, 得到字典
token = jwt_encode_handler(payload) # 生成jwt字符串

生成之后,通過JSON字符串的方式返回給前端。

2.前端保存JWT

前端有兩種方式儲存數(shù)據(jù),分別是localStorage 和 sessionStorage。

HTML5提供了兩種在客戶端存儲數(shù)據(jù)的新方法:
- localStorage - 永久數(shù)據(jù)存儲; 不同頁面數(shù)據(jù)共享
- sessionStorage - 臨時存儲,關(guān)閉頁面或瀏覽器后會被清除; (讀取sessionStorage的數(shù)據(jù)時,僅當前頁面(窗口)有效,但是JWT toekn會保存直到瀏覽器關(guān)閉)

sessionStorage.key = val // 保存數(shù)據(jù)
sessionStorage.key // 讀取數(shù)據(jù)
sessionStorage.clear() // 清除所有sessionStorage保存的數(shù)據(jù)
sessionStorage.removeItem('key');

localStorage.key = val // 保存數(shù)據(jù)
localStorage.key // 讀取數(shù)據(jù)
localStorage.clear() // 清除所有l(wèi)ocalStorage保存的數(shù)據(jù)
localStorage.removeItem('key');

3.前端發(fā)送JWT

前端會通過請求頭把JWT帶上,傳給服務端。

var config = {
 headers: { // 請求頭
  'Authorization': 'JWT ' + this.token # JWT后面有一個空格!
 },
}; 
axios.get('http://api.meiduo.site:8000/test/', config)
 .then(response => {})
 .catch(error => {});

4.校驗JWT

在前端有JWT后,再次登錄服務端,服務端就會對這串JWT進行校驗,如果有修改就不會通過,如果過期了也不會通過。

看完上述內(nèi)容,是不是對django使用JWT保存用戶登錄信息的方法有進一步的了解,如果還想學習更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI