django使用JWT儲存使用者登入資訊
在使用前必須弄明白JWT的相關知識,可以看我的另一篇博文:https://www.jb51.net/article/166843.htm
什麼是JWT?
Json web token (JWT),是為了在網路應用環境間傳遞宣告而執行的一種基於JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用於分散式站點的單點登入(SSO)場景。JWT的宣告一般被用來在身份提供者和服務提供者間傳遞被認證的使用者身份資訊,以便於從資源伺服器獲取資源,也可以增加一些額外的其它業務邏輯所必須的宣告資訊,該token也可直接被用於認證,也可被加密。
JWT最普遍的一個作用就是用來儲存使用者的登入資訊。
JWT的流程
1.簽發JWT
在使用者正確輸入賬號密碼成功登入後,服務端就會簽發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有效時間 }
然後就可以簽發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
前端有兩種方式儲存資料,分別是localStorage 和 sessionStorage。
HTML5提供了兩種在客戶端儲存資料的新方法:
- localStorage - 永久資料儲存; 不同頁面資料共享
- sessionStorage - 臨時儲存,關閉頁面或瀏覽器後會被清除; (讀取sessionStorage的資料時,僅當前頁面(視窗)有效,但是JWT toekn會儲存直到瀏覽器關閉)
sessionStorage.key = val // 儲存資料
sessionStorage.key // 讀取資料
sessionStorage.clear() // 清除所有sessionStorage儲存的資料
sessionStorage.removeItem('key');
localStorage.key = val // 儲存資料
localStorage.key // 讀取資料
localStorage.clear() // 清除所有localStorage儲存的資料
localStorage.removeItem('key');
3.前端傳送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進行校驗,如果有修改就不會通過,如果過期了也不會通過。
到此這篇關於django使用JWT儲存使用者登入資訊的文章就介紹到這了,更多相關django 儲存使用者登入資訊內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!