django使用JWT保存用戶登錄信息
在使用前必須弄明白JWT的相關(guān)知識(shí),可以看我的另一篇博文:https://www.jb51.net/article/166843.htm
什么是JWT?
Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).該token被設(shè)計(jì)為緊湊且安全的,特別適用于分布式站點(diǎn)的單點(diǎn)登錄(SSO)場(chǎng)景。JWT的聲明一般被用來(lái)在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
JWT最普遍的一個(gè)作用就是用來(lái)保存用戶的登錄信息。
JWT的流程
1.簽發(fā)JWT
在用戶正確輸入賬號(hào)密碼成功登錄后,服務(wù)端就會(huì)簽發(fā)JWT。
django使用第三方庫(kù)djangorestframework-jwt生成JWT,所以先安裝第三方包。
pip install djangorestframework-jwt
然后需要在django的配置上增加:
REST_FRAMEWORK = { ’DEFAULT_AUTHENTICATION_CLASSES’: ( ’rest_framework_jwt.authentication.JSONWebTokenAuthentication’, # jwt認(rèn)證 ’rest_framework.authentication.SessionAuthentication’, # 管理后臺(tái)使用 ’rest_framework.authentication.BasicAuthentication’, ), ...}JWT_AUTH = { # 導(dǎo)包: import datetime ’JWT_EXPIRATION_DELTA’: datetime.timedelta(days=1), # jwt有效時(shí)間}
然后就可以簽發(fā)JWT了。
from rest_framework_jwt.settings import api_settingsjwt_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:登錄的用戶對(duì)象payload = jwt_payload_handler(user) # 生成payload, 得到字典token = jwt_encode_handler(payload) # 生成jwt字符串
生成之后,通過(guò)JSON字符串的方式返回給前端。
2.前端保存JWT
前端有兩種方式儲(chǔ)存數(shù)據(jù),分別是localStorage 和 sessionStorage。
HTML5提供了兩種在客戶端存儲(chǔ)數(shù)據(jù)的新方法:- localStorage - 永久數(shù)據(jù)存儲(chǔ); 不同頁(yè)面數(shù)據(jù)共享- sessionStorage - 臨時(shí)存儲(chǔ),關(guān)閉頁(yè)面或?yàn)g覽器后會(huì)被清除; (讀取sessionStorage的數(shù)據(jù)時(shí),僅當(dāng)前頁(yè)面(窗口)有效,但是JWT toekn會(huì)保存直到瀏覽器關(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
前端會(huì)通過(guò)請(qǐng)求頭把JWT帶上,傳給服務(wù)端。
var config = { headers: { // 請(qǐng)求頭 ’Authorization’: ’JWT ’ + this.token # JWT后面有一個(gè)空格! },}; axios.get(’http://api.meiduo.site:8000/test/’, config) .then(response => {}) .catch(error => {});
4.校驗(yàn)JWT
在前端有JWT后,再次登錄服務(wù)端,服務(wù)端就會(huì)對(duì)這串JWT進(jìn)行校驗(yàn),如果有修改就不會(huì)通過(guò),如果過(guò)期了也不會(huì)通過(guò)。
到此這篇關(guān)于django使用JWT保存用戶登錄信息的文章就介紹到這了,更多相關(guān)django 保存用戶登錄信息內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. PHP設(shè)計(jì)模式中工廠模式深入詳解2. PHP循環(huán)與分支知識(shí)點(diǎn)梳理3. xpath簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理4. 詳細(xì)分析css float 屬性以及position:absolute 的區(qū)別5. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)6. 得到XML文檔大小的方法7. jsp+servlet簡(jiǎn)單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))8. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長(zhǎng)日期的方法9. ASP實(shí)現(xiàn)加法驗(yàn)證碼10. ASP基礎(chǔ)知識(shí)Command對(duì)象講解
