TokenObject.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import jwt
  2. import time
  3. from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
  4. OAUTH_REFRESH_TOKEN_TIME
  5. class TokenObject:
  6. def __init__(self, token=None, returntpye='currency'):
  7. if token == 'local':
  8. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  9. if token == 'test':
  10. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  11. self.token = token
  12. self.lang = None
  13. self.userID = None
  14. self.user = ''
  15. self.code = 0
  16. self.valid()
  17. self.returntpye = returntpye
  18. def valid(self):
  19. if self.token is None:
  20. self.code = 309
  21. return
  22. try:
  23. self.token = self.token.replace("Bearer ", "")
  24. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  25. self.userID = res.get('userID', None)
  26. self.lang = res.get('lang', None)
  27. self.user = res.get('user', '')
  28. # 刷新登录时间
  29. # if self.userID:
  30. # print(self.user)
  31. # redisObj = RedisObject(db=3)
  32. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  33. except jwt.ExpiredSignatureError as e:
  34. self.code = 309
  35. return
  36. except Exception as e:
  37. self.code = 309
  38. return
  39. else:
  40. if not self.userID:
  41. self.code = 309
  42. return
  43. else:
  44. if self.userID:
  45. self.code = 0
  46. return res
  47. else:
  48. self.code = 309
  49. return
  50. def generate(self, data=None):
  51. if data is None:
  52. data = {}
  53. try:
  54. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  55. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  56. now_stamp = int(time.time())
  57. access_data = data
  58. refresh_data = data
  59. access_data['exp'] = access_expire + now_stamp
  60. refresh_data['exp'] = refresh_expire + now_stamp
  61. access_token = jwt.encode(access_data,
  62. OAUTH_ACCESS_TOKEN_SECRET,
  63. algorithm='HS256')
  64. refresh_token = jwt.encode(
  65. refresh_data,
  66. OAUTH_REFRESH_TOKEN_SECRET,
  67. algorithm='HS256')
  68. res = {
  69. 'access_token': access_token,
  70. 'access_expire': access_expire,
  71. 'refresh_expire': refresh_expire,
  72. 'refresh_token': refresh_token,
  73. }
  74. if self.returntpye=='pc':
  75. res = {
  76. 'token': access_token,
  77. 'access_expire': access_expire,
  78. 'refresh_expire': refresh_expire,
  79. 'refresh_token': refresh_token,
  80. }
  81. except Exception as e:
  82. self.code = 309
  83. print(repr(e))
  84. else:
  85. self.code = 0
  86. return res
  87. def encryption(self, data=None):
  88. if data is None:
  89. data = {}
  90. try:
  91. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  92. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  93. now_stamp = int(time.time())
  94. access_data = data
  95. refresh_data = data
  96. access_data['exp'] = access_expire + now_stamp
  97. refresh_data['exp'] = refresh_expire + now_stamp
  98. access_token = jwt.encode(access_data,
  99. OAUTH_ACCESS_TOKEN_SECRET,
  100. algorithm='HS256')
  101. return access_token
  102. except Exception as e:
  103. self.code = 309
  104. print(repr(e))
  105. def refresh(self):
  106. if not self.token:
  107. self.code = 309
  108. return
  109. try:
  110. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  111. except jwt.ExpiredSignatureError as e:
  112. print('过期')
  113. print(repr(e))
  114. self.code = 309
  115. except Exception as e:
  116. self.code = 309
  117. print(repr(e))
  118. else:
  119. self.code = 0
  120. userID = res.get('userID', '')
  121. user = res.get('user', '')
  122. lang = self.lang
  123. self.userID = userID
  124. self.user = user
  125. refreshRes = self.generate(data={'userID': userID, 'lang': lang, 'user': user})
  126. return refreshRes