Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置请求';s限制为joken JWT_Python_Flask_Jwt - Fatal编程技术网

Python 如何设置请求';s限制为joken JWT

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

我正在使用python、flask和实现JWT的API,并使用过期超时,但我还想设置一个限制请求,因此如果超时或令牌已在五个请求中使用,则令牌将无效。 我一直在使用过期超时,但我找不到如何通过五个请求来实现过期。谢谢你的帮助

代码直到现在:

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数据库中的令牌放在一起,并计算它被使用了多少次,然后添加逻辑来比较哪个先到、时间限制或令牌被使用了多少次,如果已经使用了五次,您可以撤销该令牌并生成一个新令牌或其他您想要执行的工作流。下面是在令牌被访问五次后撤销/黑名单令牌的进一步参考