import time
import jwt
from django.conf import settings
from django.http import JsonResponse
class JwtMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
response = self.get_response(request)
if request.path in settings.API_ROUTE_WHITE_LIST:
return response
else:
token = request.META.get('HTTP_AUTHORIZATION')
if token is not None:
token = token.replace('Bearer ', '')
try:
decode = jwt.decode(token, settings.JWT_TOKEN, algorithms=['HS256'])
exp = decode['exp']
if int(time.time()) > exp:
# token过期了
jwt_obj = dict()
jwt_obj['code'] = 400002
jwt_obj['info'] = 'Token Expired!'
return JsonResponse(jwt_obj, safe=False)
else:
response['a']=100
return response
except (jwt.exceptions.InvalidSignatureError, jwt.exceptions.DecodeError):
jwt_obj = dict()
jwt_obj['code'] = 400003
jwt_obj['info'] = 'Token Verify Failed'
return JsonResponse(jwt_obj, safe=False)
else:
jwt_obj = dict()
jwt_obj['code'] = 400003
jwt_obj['info'] = 'Token Verify Failed'
return JsonResponse(jwt_obj, safe=False)