JWTAuthentication_diy.py 1.6 KB

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