我目前正在使用烧瓶-登录在我的应用程序的用户登录会话管理。我用的是烧瓶炼金术,所以一切正常。由于我以前的sql经验,我不喜欢ORM。我喜欢直接使用SQL。也许是因为我在ORM方面的知识不健全。无论如何,我的问题是-我是否可以使用烧瓶登录而不用ORM/烧瓶-sqlalchemy,在那里我要通过pymysql或MySQL-连接器获取用户数据?
我知道我可以在退出时自己创建会话和弹出会话,但是我想知道是否有任何方法可以在pymysql中使用烧瓶登录或任何其他会话管理库?
发布于 2022-10-30 01:31:59
我提出了以下解决方案。它允许重新定义从请求Authorization头获取用户并在无状态应用程序中使用。
from flask_login import login_required, LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.request_loader
def load_user_from_request(request):
api_key: str = request.headers.get('Authorization')
if api_key:
token_type, token = api_key.split()
print("token_type:" + token_type)
if token_type == "JWT" and token:
decoded_token: dict = decode_token(token)
username = decoded_token['identity']
user: User = get_user(username)
return user
return None因此,如果您的端点只允许授权用户使用,则@jwt_required或@login_required注释可以与方法一起使用。
确保路由注释是确保其他注释正确工作的第一个;您的端点可以如下所示:
@app.route('/api/users', methods=['GET'])
@login_required
@roles_required(['Admin']) # optional
def list_users():
return list[] # your code here这里是另一个提到的注释,@roles_required,当然不是必须的。由于Flask用户管理要求您使用ORM,所以您可以通过定义自己的@roles_required注释(参见示例这里 )来克服这一问题。
https://stackoverflow.com/questions/54750019
复制相似问题