JWT使用方式 中介軟體 類裝飾器

2021-10-07 01:26:21 字數 4391 閱讀 4941

我們要先了解我們為什麼要使用 jwt

目的: 防止使用者 使用他人敏感資訊 進行篡改

首先 在 settings.py 中的 middleware 載入 中介軟體 配置

middleware =

[#載入自定義中介軟體 資料夾名.檔名.類名

]

在 寫邏輯的 後端 頁面中

編寫 中介軟體

#中介軟體 配合 jwt

#導包import jwt

from django.utils.deprecation import middlewaremixin

#自定義 中介軟體類

class

mymiddleware

(middlewaremixin)

:#請求之前 每次請求之前 都會被觸發

defprocess_request

(self,request)

: uid = request.get.get(

'uid'

) jwt_str = request.get.get(

'jwt'

)# 對 jwt 進行解密 解密之後為 字典

'你篡改了使用者id'

)pass

#模板渲染之前

defprocess_view

(self,request,view_func,view_args,view_kwargs)

:pass

#請求之後

defprocess_response

(self,request,response)

:return response

在 後端 使用者登入介面

生成jwt

#登入介面

class

login

(apiview)

:def

get(self,request)

:#接收引數

username = request.get.get(

'username'

,'沒有接受到'

) password = request.get.get(

'password'

,'沒有接受到'

)#查詢資料

user = user.objects.

filter

(username=username,password=make_password(password)

).first(

)if user:

res =

res[

'code']=

200 res[

'message']=

'登入成功'

res[

'username'

]= user.username

res[

'uid'

]= user.

id#加入jwt 編碼機制

#進行編碼

encode_jwt = jwt.encode(

,'123'

,algorithm=

'hs256'

)#解碼操作

#強轉 encode_str = encode_jwt.decode(

'utf-8'

) res[

'jwt'

]= encode_str

return response(res)

else

: res =

res[

'code']=

405 res[

'message']=

'使用者名稱或密碼錯誤'

return response(res)

在前端的登入 介面中 要將 jwt 儲存到 localstorage 裡面

localstorage.setitem(『jwt』,result.data.jwt)

import jwt

#裝飾器

defmy_decorator

(func)

:def

(request,

*args,

**kwargs)

:print

('這個裝飾器被呼叫了'

)print

('請求介面位址是%s'

% request.path)

#判斷jwt邏輯

'沒有令牌'

'你篡改了使用者id'

)return func(request,

*args,

**kwargs)

#類裝飾器呼叫

from django.utils.decorators import method_decorator

在查詢使用者資訊類時 呼叫

#使用者資訊

class

userinfo

(apiview)

: @method_decorator(my_decorator)

defget

(self,request)

: uid = request.get.get(

'uid'

)#查詢資料

user = user.objects.get(id=

int(uid)

)#序列化物件

user_ser = userser(user)

return response(user_ser.data)

在 使用者登入介面 後端

#登入介面

class

login

(apiview)

:def

get(self,request)

:#接收引數

username = request.get.get(

'username'

,'沒有接受到'

) password = request.get.get(

'password'

,'沒有接受到'

)#查詢資料

user = user.objects.

filter

(username=username,password=make_password(password)

).first(

)if user:

res =

res[

'code']=

200 res[

'message']=

'登入成功'

res[

'username'

]= user.username

res[

'uid'

]= user.

id#加入jwt 編碼機制

#進行編碼

encode_jwt = jwt.encode(

,'123'

,algorithm=

'hs256'

)#解碼操作

#強轉 encode_str = encode_jwt.decode(

'utf-8'

) res[

'jwt'

]= encode_str

return response(res)

else

: res =

res[

'code']=

405 res[

'message']=

'使用者名稱或密碼錯誤'

return response(res)

在前端的登入 介面中 要將 jwt 儲存到 localstorage 裡面

localstorage.setitem(『jwt』,result.data.jwt)

中介軟體使用

express是乙個自身功能極簡,完全是路由和中介軟體構成乙個web開發框架 乙個express應用就是在呼叫各種中介軟體。中介軟體在express開發中很重要 中介軟體函式能夠訪問請求物件 req 響應物件 res 以及應用程式的請求 響應迴圈中的下乙個中介軟體函式 該next功能是中介軟體函式中...

springcloud 訊息中介軟體使用

一。rabbitmq amqptemplate使用 1.引入依賴 org.springframework.boot spring boot starter amqp 2.訊息傳送方 先注入amqptemplate類 autowired private amqptemplate amqptemplat...

Nginx中介軟體使用整理

nginx是乙個高效能的 和反向 伺服器,靜態資源,服務 也是乙個imap pop3 smtp 伺服器,最出名的就是反向 簡答理解就是作用在伺服器端,大概流程 客戶端 訪問nginx的虛擬伺服器 找到真實的伺服器 在返回給客戶端 是否還需要通過nginx待驗證 背景 在外網 虛擬機器 環境下開發前端...