60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
token_service.py
|
|
"""
|
|
from __future__ import print_function, unicode_literals, absolute_import, division
|
|
from datetime import datetime, timedelta
|
|
|
|
import jwt
|
|
from flask import current_app
|
|
|
|
from domain_admin.config import SECRET_KEY, TOKEN_EXPIRE_DAYS
|
|
from domain_admin.enums.config_key_enum import ConfigKeyEnum
|
|
from domain_admin.utils.flask_ext.app_exception import ForbiddenAppException, AppException
|
|
|
|
|
|
def encode_token(payload):
|
|
"""
|
|
获取token
|
|
:param payload: dict
|
|
:return: byte
|
|
"""
|
|
# config = system_service.get_system_config()
|
|
# secret_key = config['secret_key']
|
|
|
|
secret_key = current_app.config[ConfigKeyEnum.SECRET_KEY]
|
|
token_expire_days = int(current_app.config[ConfigKeyEnum.TOKEN_EXPIRE_DAYS])
|
|
|
|
# bugfix 用户删除token过期天数变量后报错
|
|
# token_expire_days = TOKEN_EXPIRE_DAYS
|
|
|
|
# 使用utc时间
|
|
payload['exp'] = datetime.utcnow() + timedelta(days=token_expire_days)
|
|
|
|
# 返回 str 部分Python版本会报错
|
|
return jwt.encode(payload=payload, key=secret_key, algorithm='HS256')
|
|
|
|
|
|
def decode_token(token):
|
|
"""
|
|
验证并解析token
|
|
:param token: str
|
|
:return: dict
|
|
"""
|
|
# config = system_service.get_system_config()
|
|
|
|
secret_key = current_app.config[ConfigKeyEnum.SECRET_KEY]
|
|
|
|
try:
|
|
return jwt.decode(jwt=token, key=secret_key, algorithms=['HS256'])
|
|
except Exception:
|
|
raise AppException('token无效')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
data = {'name': 'Tom'}
|
|
w = encode_token(data)
|
|
print(w)
|
|
|
|
print(decode_token(w))
|