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

django restframe jwt自定義(二)

編輯:Python

本篇記錄一下自己對django鑒權的學習和理解

先上代碼

# Backend可以是普通的python類,但是關於登陸校驗需要具有以下規定的2個方法(登錄basic認證方式# BasicAuthentication之後的後端處理邏輯-理解為中間件也可以):
# authenticate(self,username=None,password=None) 或者authenticate(self,token=None),如果通過驗證,返回值是一個User對象,如果不通過驗證,返回值是None。
# get_user(self,user_id)
# 這兩類方法的具體使用不是很相同,關於登陸校驗的authenticate,Django在使用他們的時候,會遍歷所有的auth backends
# 一旦發現有一個backend校驗通過,即返回User對象,那麼將會停止下面backend的校驗,並且將校驗成功的backend綁定在該用戶上放入session中,
# 此後如果再次調用該方法,那麼將會使用session中的backend進行校驗,而不再遍歷所有backend了。
AUTHENTICATION_BACKENDS = ['util.auth_func.CustomBackend']
REST_FRAMEWORK = {
# api文檔
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
# 配置默認的認證方式 base:賬號密碼驗證
# session:session_id認證
'DEFAULT_AUTHENTICATION_CLASSES': (
# drf的這一階段主要是做驗證,middleware的auth主要是設置session和user到request對象
# 默認的驗證是按照驗證列表從上到下的驗證(只需要通過一個即可)
# 判斷request中是否帶有JWT的自定義請求頭(token形式)
'rest_framework_simplejwt.authentication.JWTAuthentication',
# 判斷是否有session_id(cookie形式)
'rest_framework.authentication.SessionAuthentication',
# basic認證(用戶密碼登錄)
'rest_framework.authentication.BasicAuthentication',
)}

AUTHENTICATION_BACKENDS 登錄的時候會調用(有優先級)

DEFAULT_AUTHENTICATION_CLASSES

        我這裡寫了三種校驗方式  但凡匹配到任意一種,無論是否成功,都不會繼續校驗了

        第一級:rest_framework_simplejwt.authentication.JWTAuthentication

                以postman為例,因為我的登錄校驗是優先jwt,所以我參數裡填token的形式 就只會                 走 JWTAuthentication

        

        第二級:rest_framework.authentication.SessionAuthentication  --檢查request中是否帶有session_id

        

 第三級:rest_framework.authentication.BasicAuthentication --basic認證,就是賬號密碼

這一期就寫這麼多  有時間再記錄。之前看到過一張時序圖 還挺好的 我貼在下面 

 


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