28 自定義認證類

2022-09-20 13:06:13 字數 2340 閱讀 9539

基於baseauthentication:沒有提供獲取user的方法

基於basejsonwebtokenauthentication:可以由authenticate_credentials()獲取user

auth.py

#

自定義認證類

from rest_framework.authentication import

baseauthentication

from rest_framework.exceptions import

authenticationfailed

from rest_framework_jwt.settings import

api_settings

jwt_decode_handler =api_settings.jwt_decode_handler

import

jwtfrom .models import

user

class

jwtauthentication(baseauthentication):

defauthenticate(self, request):

#第一步:取出前端傳入的token串(從請求頭的token中取出)

#驗證token是否合法

try:

#通過token,得到payload,在得到的過程中會校驗,是否過期,是否被穿該

payload =jwt_decode_handler(jwt_value)

except

jwt.expiredsignature:

raise authenticationfailed('

簽名過期')

except

jwt.decodeerror:

raise authenticationfailed('

簽名驗證失敗')

except

jwt.invalidtokenerror:

raise authenticationfailed('

未知錯誤')

print

(payload)

#有沒有問題?每次都要去資料庫查使用者,效率低

#優先用這種

user=user.objects.get(id=payload['

user_id'])

#不需要查資料庫,效率高,存在缺陷,

#user=user(id=payload['user_id'],username=payload['username'])

return

(user, jwt_value)

else

:

#沒帶token串,沒登入

raise authenticationfailed('

您沒有攜帶token

')

#區域性使用views.py

#

區域性使用,在檢視類中配置

from .auth import

jwtauthentication

class

testview(apiview):

#自己寫的認證類

authentication_classes =[jwtauthentication, ]

defget(self, request):

print(request.user) #

這就是當前登入使用者

return response('

你必須登入,才能看到我

')

#全域性使用settings.py

#

全域性使用,在配置檔案中配置

rest_framework =

#全域性使用後,區域性禁用

class

loginview(apiview):

authentication_classes =

#注意:配置的所有認證,許可權,頻率。。。優先用檢視類自己的,再用配置檔案的,最後用drf內建的

補充:(settings.py)

#

補充:token過期時間很快,改改過期時間,配置7天過期

jwt_auth =

post測試

使用者認證自定義

設定郵箱和使用者名稱和手機號均可登入 authentication backends users.views.custombackend class custombackend modelbackend 自定義使用者驗證規則 defauthenticate self,username none pa...

Shiro 自定義角色 認證

由於shiro filterchaindefinitions中 roles預設是and,user,roles system,general 比如 roles system,general 表示同時需要 system 和 general 2個角色才通過認證 所以需要自定義 繼承 authorizati...

Shiro安全框架 自定義認證

1.和之前一樣先引入依賴 org.apache.shiro shiro web org.apache.shiro shiro core org.apache.shiro shiro spring commons logging commons logging 1.22.配置好自定義shiro.ini...