django使用JWT保存用戶登陸信息

在使用前必須弄明白JWT的原理,原理能夠看個人另外一篇博文:http://www.javashuo.com/article/p-bxklibbk-dq.htmlhtml

  • JWT的流程

 

1.簽發JWT

在用戶正確輸入帳號密碼成功登陸後,服務端就會簽發JWT。前端

django使用第三方庫djangorestframework-jwt生成JWT,因此先安裝第三方包。ios

pip install djangorestframework-jwtdjango

 

而後須要在django的配置上增長:axios

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了。api

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。session

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');this

 

3.前端發送JWT

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

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進行校驗,若是有修改就不會經過,若是過時了也不會經過。

相關文章
相關標籤/搜索