【问题标题】:How to set a request's limit to a joken JWT如何将请求的限制设置为笑话 JWT
【发布时间】:2020-04-06 10:37:04
【问题描述】:

我正在使用 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))

【问题讨论】:

    标签: python flask jwt


    【解决方案1】:

    我看到您正在使用 mongo,工作流程是您可以将计数器与令牌一起放入 mongo 数据库中并计算它已经使用了多少,然后添加逻辑来比较哪个先到,时间限制或如何令牌已使用多次,如果已使用五次,您可以撤销令牌并生成新令牌或您想要执行的其他工作流程。这是在令牌被访问五次后撤销/将令牌列入黑名单的进一步参考https://flask-jwt-extended.readthedocs.io/en/stable/blacklist_and_token_revoking/

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 2020-07-03
      • 2021-02-10
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多