没有flask-sqlalchemy或ORM的flask登录

Jay*_*y85 5 python flask flask-sqlalchemy pymysql flask-login

我目前在我的应用程序中使用 Flask-login 进行用户登录会话管理。我正在使用flask-sqlalchemy,所以一切正常。由于我之前的 sql 经验,我不是 ORM 的粉丝。我喜欢直接使用SQL。可能是因为我对 ORM 的了解不深。无论如何,我的问题是 - 有没有什么方法可以在没有 ORM/flask-sqlalchemy 的情况下使用烧瓶登录,在那里我通过 pymysql 或 MySQL 连接器获取用户数据?

我知道我可以自己创建会话并在我注销时弹出,但我想知道是否有任何方法可以将flask-login或任何其他会话管理库与pymysql一起使用?

bar*_*ian 0

我采用了以下解决方案。它允许重新定义从请求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
Run Code Online (Sandbox Code Playgroud)

因此,如果您的端点仅允许授权用户使用,@jwt_required或者@login_required注释可以与方法一起使用。

确保路由注解是第一个,以保证其他注解的正确工作;你的端点可以是这样的:

@app.route('/api/users', methods=['GET'])
@login_required
@roles_required(['Admin'])  # optional
def list_users():
   return list[]  # your code here
Run Code Online (Sandbox Code Playgroud)

这里提到了另外一个注释,@roles_required当然它不是强制性的。由于 Flask 用户管理要求您使用 ORM,因此您可以通过定义自己的@roles_required注释来克服这个问题,请参阅此处的示例。