在 flutter 中维护 flask_login 会话

Maintain flask_login session in flutter

Soo...我有一个带有 flask 后端和 flutter 前端的应用程序。它利用 flask_login 来管理用户。问题是——我不知道如何在客户端维护会话。 Flutter 客户端从服务器获得响应,但我没有看到任何令牌,或 user_id inside.

到目前为止,我已经尝试解析响应,但没有成功,我使用了 的解决方案 同样,没有成功。

服务器端https://github.com/GreenBlackSky/COIN/blob/master/api_app/app/login_bp.py

客户端https://github.com/GreenBlackSky/coin_web_client/blob/master/lib/session.dart

也许,毕竟使用 flask_login 并不是一个好主意..

您尝试过 request_loader 方法吗?您可以使用 url 参数和 Authorization header 从 Flutter 客户端登录。引用自 documentation,

For example, to support login from both a url argument and from Basic Auth using the Authorization header:

@login_manager.request_loader
def load_user_from_request(request):

    # first, try to login using the api_key url arg
    api_key = request.args.get('api_key')
    if api_key:
        user = User.query.filter_by(api_key=api_key).first()
        if user:
            return user

    # next, try to login using Basic Auth
    api_key = request.headers.get('Authorization')
    if api_key:
        api_key = api_key.replace('Basic ', '', 1)
        try:
            api_key = base64.b64decode(api_key)
        except TypeError:
            pass
        user = User.query.filter_by(api_key=api_key).first()
        if user:
            return user

    # finally, return None if both methods did not login the user
    return None

如果您不想再使用 flask_login,我建议您使用 flask_jwt_extended。请注意,身份验证将使用 JWT 令牌而不是会话进行。

基本上,您需要创建三个路由:一个用于在用户登录时创建访问和刷新令牌,一个用于使用刷新令牌刷新过期的访问令牌,一个用于在用户注销时删除令牌.然后,您将使用 @jwt_required 装饰器保护您的 API 端点。

具体实现请参考文档