Python 如何设置请求';s限制为joken JWT
我正在使用python、flask和实现JWT的API,并使用过期超时,但我还想设置一个限制请求,因此如果超时或令牌已在五个请求中使用,则令牌将无效。 我一直在使用过期超时,但我找不到如何通过五个请求来实现过期。谢谢你的帮助 代码直到现在:Python 如何设置请求';s限制为joken JWT,python,flask,jwt,Python,Flask,Jwt,我正在使用python、flask和实现JWT的API,并使用过期超时,但我还想设置一个限制请求,因此如果超时或令牌已在五个请求中使用,则令牌将无效。 我一直在使用过期超时,但我找不到如何通过五个请求来实现过期。谢谢你的帮助 代码直到现在: from flask import * import jwt import datetime from flask_pymongo import PyMongo from functools import wraps import hashlib app
from flask import *
import jwt
import datetime
from flask_pymongo import PyMongo
from functools import wraps
import hashlib
app = Flask(__name__)
app.config['MONGO_DBNAME'] = 'MONGOCONEX'
app.config['MONGO_URI'] = 'mongodb://localhost:27017/MONGOCONEX'
app.config['log_log_1'] = 'LOGKEYCONNECT'
app.config['key1'] = 'SECRECTKEY'
app.config['key2'] = 'PASSKEY'
mongo = PyMongo(app)
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.args.get('token')
if not token:
return jsonify({'error': 402,'message':'Token is missing'})
try:
data = jwt.decode(token, app.config['key1'])
except:
return jsonify({'error': 403,'message': 'Token Invalid'})
return f(*args, **kwargs)
return decorated
@app.route('/results', methods=['GET'])
@token_required
def get_all_stars():
results = mongo.db.resultados
output = []
date_start = datetime.datetime.now() - datetime.timedelta(days=1*365)
date_end = datetime.datetime.now() + datetime.timedelta(days=1*365)
for s in results.find():
#print(s)
if date_start <= s['day'] <= date_end:
output.append({'day':s['day'], 'monthly_prediction':s['monthly_prediction'], 'percent_prediction':s['percent_prediction']})
return jsonify({'result' : output})
@app.route('/login', methods=['GET'])
def login():
log_key = request.args.get('l_k')
password_k = request.args.get('p_k')
md5_hash = hashlib.md5()
md5_hash.update(b""+app.config['key2']+"")
encoded_pass_key = md5_hash.hexdigest()
if (log_key == app.config['log_log_1']) and (password_k == encoded_pass_key):
token = jwt.encode({'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=2)}, app.config['key1'])
return jsonify({'token': token.decode('UTF-8')})
return jsonify({'error': 401, 'description': 'Not verified', 'Wrong Auth': 'Auth Required'})
if __name__ == '__main__':
try:
app.run(debug=True)
except Exception as e:
print('Error: '+str(e))
从烧瓶导入*
进口jwt
导入日期时间
从比蒙戈进口比蒙戈
从functools导入包装
导入hashlib
app=烧瓶(名称)
app.config['MONGO_DBNAME']='MONGOCONEX'
app.config['MONGO_URI']='mongodb://localhost:27017/MONGOCONEX'
app.config['log\u log\u 1']='LOGKEYCONNECT'
app.config['key1']='SECRECTKEY'
app.config['key2']='PASSKEY'
mongo=PyMongo(应用程序)
需要def令牌_(f):
@包装(f)
def装饰(*args,**kwargs):
token=request.args.get('token')
如果不是令牌:
返回jsonify({'error':402,'message':'Token is missing'})
尝试:
data=jwt.decode(令牌,app.config['key1'])
除:
返回jsonify({'error':403,'message':'Token Invalid'})
返回f(*args,**kwargs)
回报
@app.route('/results',methods=['GET'])
@需要令牌
def get_all_stars():
结果=mongo.db.resultados
输出=[]
date\u start=datetime.datetime.now()-datetime.timedelta(天=1*365)
date\u end=datetime.datetime.now()+datetime.timedelta(天=1*365)
对于results.find()中的s:
#印刷品
如果date_start我看到您正在使用mongo,那么工作流是您可以将计数器与mongo数据库中的令牌放在一起,并计算它被使用了多少次,然后添加逻辑来比较哪个先到、时间限制或令牌被使用了多少次,如果已经使用了五次,您可以撤销该令牌并生成一个新令牌或其他您想要执行的工作流。下面是在令牌被访问五次后撤销/黑名单令牌的进一步参考