44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
from fastapi import status
|
||
from starlette.middleware.base import BaseHTTPMiddleware
|
||
from urllib.request import Request
|
||
from jwt import PyJWTError
|
||
from app.common import reponse_code as rc
|
||
from app.common import jwt_check as jc
|
||
|
||
|
||
class TokenMiddleware(BaseHTTPMiddleware):
|
||
|
||
def __init__(self, app):
|
||
super().__init__(app)
|
||
|
||
async def dispatch(self, request: Request, call_next):
|
||
"""
|
||
验证token中间件
|
||
:param request: Request请求
|
||
:param call_next:
|
||
:return:
|
||
"""
|
||
token = request.headers.get('Authorization')
|
||
path = request.url.path
|
||
if check_green(path):
|
||
response = await call_next(request)
|
||
return response
|
||
if not token:
|
||
return rc.response_code_view(status.HTTP_401_UNAUTHORIZED, "缺少Token,请重新验证")
|
||
try:
|
||
jc.check_token(token)
|
||
return await call_next(request)
|
||
except PyJWTError as error:
|
||
print(error)
|
||
return rc.response_code_view(status.HTTP_401_UNAUTHORIZED, "Token错误或失效,请重新验证")
|
||
|
||
|
||
green = ['/login', '/view_img']
|
||
|
||
|
||
def check_green(s: str):
|
||
for url in green:
|
||
if url in s:
|
||
return True
|
||
return False
|