前言
在我工作的项目中,接口响应数据只有msg和code时,想获取一些其他用户数数据得去redies中获取,通过研究发现后端使用jwt-token的方式,将用户信息加密放到了redies中,那么我不就也可以通过反向操作token来获取redies中的用户信心吗?说干就干:
# 连接Redies数据库
import redis
from loguru import logger
class HDRedis:
def __init__(self):
try:
# redis链接,redis连接信息可放在配置文件方便后续修改
conf = ConfigParser()
conf.read(conf_path, encoding="utf-8")
self.r = redis.Redis(
host=conf.get("redis", "host"),
db=conf.get("redis", "db"),
port=conf.getint("redis", "port"),
password=conf.get("redis", "password"),
decode_responses=conf.get("redis", "decode_responses")
)
logger.info("redis链接成功!!!")
except:
logger.warning("redis连接失败")
def close_redis(self):
self.r.close()
def get_value_for_key(self, data):
try:
result = self.r.get(data)
logger.info(f"redis查找key为{data}的值为:{result}")
return result
except:
logger.warning(f"未在redis中找到key为:{data}的值")
return None
# 封装jwt读取redies数据的方法
from authlib.jose import jwt
from tools.handler_redis_db import HDRedis
from loguru import logger
import json
def jwt_token_decode(token):
# 其中"abcdefghijklmnopqrstuvwxyz"为加密使用的字符串
return jwt.decode(token, "abcdefghijklmnopqrstuvwxyz")
def get_redis_data(token):
jwt_result = jwt_token_decode(token)
logger.warning(f"jwt得到数据:{jwt_result}")
login_key = "login_tokens:" + jwt_result['login_user_key']
hr = HDRedis()
logger.info(f"读取数据:{login_key}")
result = json.loads(hr.get_value_for_key(login_key))
hr.close_redis()
if result:
return result
else:
logger.warning("未获取到数据")
return None
if __name__ == '__main__':
# 查看token得到的redies缓存数据
token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImIyZ****"
result = get_redis_data(token)
需要注意的是使用jwt前需要了解RD的加密方式在jwt的处理中是否存在,例如: HS521 HS520 等