JWT模式下生成token加解密

 1 from datetime import datetime, timedelta
 2 from config import settings
 3 import jwt
 4 import arrow as ar
 5 import requests as req
 6 
 7 
 8 def get_web_now_time():
 9     try:
10         res = req.get('https://www.baidu.com/').headers['Date']
11         time_diff = ar.get(res[4:-4], 'DD MMM YYYY HH:mm:ss') - ar.now().floor('second')
12         """
13         web_now_time = (ar.now() + time_diff)    web_now_time的类型是arrow.Arrow.arrow需要转换成datatime.datatime类型
14         """
15         web_now_time = (ar.now() + time_diff).datetime
16         return web_now_time
17     except BaseException as e:
18         return '获取网络时间出错,出错原因:{}'.format(e)
19 
20 
21 def create_access_token(data: dict):
22     """
23     创建token
24     :param data: 加密数据
25     :return: jwt
26     """
27     token_data = data.copy()
28     """
29     utcnow() utc是世界时 不管你设置的是哪个时区 utcnow()也是获取服务器事件
30     datetime.now() 获取当前服务器的时间
31     为什么要用get_web_now_time()      get_web_now_time()获取的是baidu的网络时间为了避免当前服务器出错
32     timedelta 延迟时间
33     JWT_SECRET_KEY = "WangYafengisahandsomeman2022"
34     JWT_ALGORITHM = "HS256"
35     JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 24 * 60 * 7
36     """
37     # token超时时间
38     # expire = datetime.utcnow() + timedelta(minutes=settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES)
39     # expire = datetime.now() + timedelta(minutes=settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES)
40     expire =get_web_now_time() + timedelta(minutes=settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES)
41     # 向jwt加入超时时间
42     token_data.update({"exp": expire})
43     # jwt加密
44     jwt_token = jwt.encode(token_data, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM)
45     return jwt_token
46 
47 
48 print(get_web_now_time())
49 print(create_access_token({"name": "wyf", "password": "123456"}))

运行结果:

2022-09-08 11:01:47.689998+08:00
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoid3lmIiwicGFzc3dvcmQiOiIxMjM0NTYiLCJleHAiOjE2NjI2OTI1MDd9.VfSrHNv8mAxKQ75ogkfhYEGCwoB1HbRPWwZMxrQt0HI

 

解密:

token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoid3lmIiwicGFzc3dvcmQiOiIxMjM0NTYiLCJleHAiOjE2NjMyMjU4ODZ9.hFTbjdD4BlsMSWOlgQ9vLiDtwpRTa_mQkcnETIIKXng"

payload = jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=[settings.JWT_ALGORITHM])

print(payload)

 

 

posted @ 2022-09-08 11:05  王亚锋  阅读(452)  评论(0编辑  收藏  举报