JWTAuthentication_diy.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from rest_framework_jwt.serializers import jwt_encode_handler,jwt_decode_handler
  2. from rest_framework.authentication import BaseAuthentication
  3. from rest_framework.exceptions import AuthenticationFailed
  4. import jwt
  5. import json
  6. from .AESencipher import aescrypt
  7. PrAes = aescrypt('yf7232275', 'ECB', '', 'gbk')
  8. def get_token(user):
  9. data = str(user.id) + "," + user.username + "," + str(user.user_modules)
  10. data = PrAes.aesencrypt(data)
  11. payload = {"token":data}
  12. token = jwt_encode_handler(payload)
  13. return token
  14. class MyJWTAuthentication(BaseAuthentication):
  15. def authenticate(self, request):
  16. token = request.META.get('HTTP_AUTHORIZATION')
  17. if token:
  18. try:
  19. payload = jwt_decode_handler(token)
  20. data = payload["token"]
  21. if '%2B' in data or " " in data:
  22. data = str(data).replace("%2B","+").replace(" ","+")
  23. data = PrAes.aesdecrypt(data)
  24. data_list = data.split(",")
  25. user = {"uid":data_list[0],"username":data_list[1],"user_modules":data_list[2]}
  26. return (user,token)
  27. except jwt.ExpiredSignature:
  28. msg = 'token过期'
  29. raise AuthenticationFailed(msg)
  30. except jwt.DecodeError:
  31. msg = 'toke非法'
  32. raise AuthenticationFailed(msg)
  33. except jwt.InvalidTokenError:
  34. msg = '用户非法'
  35. raise AuthenticationFailed(msg)
  36. except Exception as e:
  37. msg=str(e)
  38. raise AuthenticationFailed(msg)
  39. raise AuthenticationFailed('token为空')