是否可以在运行时将jwt设置为可选



我正在使用扩展的烧瓶JWT(https://pypi.org/project/Flask-JWT-Extended/)来保护我的烧瓶应用程序。jwt_required装饰器将optional作为参数。然而,我的flask应用程序是在类中创建的,在实例化该类之前,我无法设置optional参数。以下是我尝试过的:

from flask import Flask, jsonify
from flask_jwt_extended import jwt_required, JWTManager
jwt_optional = False

class Node:
def __init__(self, name: str, key: str, jwt_opt: bool = False):
self.app = Flask(name)
self.app.config['SECRET_KEY'] = key
global jwt_optional
jwt_optional = jwt_opt
self.app.add_url_rule(rule='/get_token',
endpoint='get_token',
view_func=self.get_token,
methods=['GET'])
@jwt_required(optional=jwt_optional)
def get_token(self):
print('Token success')
return jsonify({'msg': 'Token success'})

if __name__ == '__main__':
node = Node('Test Node', key='unsafe', jwt_opt=True)
app = node.app
app.config['TESTING'] = True
jwt = JWTManager(app=app)
test_app = app.test_client()
response = test_app.get('/get_token')
print(response.json)

我想很明显,它不起作用,因为在我更改全局变量之前对decorator进行了评估。

是否可以在运行时使令牌可选?

我还必须处理可选JWT的情况。我最终做的是将decorator放在一个通用函数的顶部,然后在路由过程中简单地调用该函数——或者跳过它,如果jwt_optial是True

jwt_optional = True
@jwt_required()
def jwt_protection():
pass
# ...
class Node:
# ...
def get_token(self):
if jwt_optional is False:
jwt_protection()
print('Token success')
return jsonify({'msg': 'Token success'})

我认为这是一个简单的解决方法,它也可能对您的情况有所帮助

相关内容

  • 没有找到相关文章

最新更新