使用缓存机制,将已验证通过的令牌存储在缓存中,避免多次重复验证。
示例代码:
import time
import hashlib
from functools import wraps
from flask import Flask, request, jsonify
app = Flask(__name__)
cache = {}
def validate_token(token):
if token in cache:
# 已经验证过,从缓存中直接获取
return cache[token]
# 验证 token
# ...
# 将验证结果存入缓存
cache[token] = result
# 缓存有效时间 5 分钟
cache[token]['expires'] = time.time() + 300
return result
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': 'Token is missing!'}), 401
# 验证 token
result = validate_token(token)
if not result['valid']:
return jsonify({'message': 'Invalid token!'}), 401
return f(*args, **kwargs)
return decorated
@app.route('/api')
@token_required
def protected():
return jsonify({'message': 'Hello, World!'})
if __name__ == '__main__':
app.run(debug=True)
在该示例中,validate_token() 函数将验证结果存储在 cache 中。token_required() 装饰器可以应用到需要验证的视图函数上,确保路由处理程序只有在令牌验证成功后才会执行。如果缓存中存在有效的令牌,请返回缓存结果,否则验证并将结果存储在缓存中。这样,每次需要验证令牌时就不必再进行重复的验证,提高了程序效率。