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一起使用?
我采用了以下解决方案。它允许重新定义从请求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注释来克服这个问题,请参阅此处的示例。
| 归档时间: |
|
| 查看次数: |
3138 次 |
| 最近记录: |