程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

django simple jwt自動續期策略

編輯:Python

方案

1.登錄過後給前端進行返回token並設置了過期時間30分鐘,每次請求的時候前端把token存在請求頭裡面進行發請求,後端接收請求的時候獲取請求頭出來進行jwt解析判斷過期時間是否小於30分鐘,如果小於30分鐘就生成新的token在responseHearde進行返回即可
2.當某個用戶觸發事件時,使用中間件,後端檢測發現token 快要到過期時間 ,
生成新的token以及refresh_token ,更新 redis緩存中的token信息,
後面前端請求Header中設置的token保持不變,校驗有效性以緩存中的token為准

我這邊用的第一種方案
中間件

from django.utils import deprecation
from xxxxxximport tools as ts
from django.core.cache import cache
from xxxxxximport settings as config
class MyMiddleware(deprecation.MiddlewareMixin):
def __init__(self, get_response=None):
self.get_response = get_response
def process_response(self, request, response):
auth_token = request.META.get('HTTP_AUTHORIZATION')
if auth_token:
auth_token = auth_token[7:]
if cache.get(auth_token):
# 緩存中的過期時間與 當前時間戳相減 小於或等於該 配置數
token_obj,time_remaining = ts.output_time_remaining(auth_token)
if time_remaining <= config.HALF_HOUR:
refresh_token = token_obj["refresh_token"]
# 根據緩存中的 refresh token 更新
data = ts.update_token(refresh_token)
# 加入響應 頭中
response["NEW_HTTP_AUTHORIZATION"] = data["token"]
expire_time1 = ts.output_expire_time()
# 將新token 加入 緩存
cache.set(data["token"],'{"refresh_token":'+f'"{refresh_token}"'+',"expire_time":'+str(expire_time1)+'}',config.UPDATE_FAILURE_TIME)
token_period_validity = int(cache.ttl(auth_token))
if token_period_validity:
# 給原來的 token 設置 黑名單
cache.set(auth_token+config.JWT_BLACK_LIST_TAG, "user_id", time_remaining+config.REDIS_TOKEN_PAST_DUE_TIME)
# 在緩存中刪除 原token
cache.delete(auth_token)
return response

具體整體代碼就不細寫
整體流程圖 :


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved