Soo。。。我有一个带有flask
后端和flutter
前端的应用程序。它利用flask_login
来管理用户。问题是——我不知道如何在客户端维护会话。Flutter客户端从服务器获得响应,但我在里面看不到任何令牌或user_id。
到目前为止,我已经尝试过解析响应,但没有成功,我使用了"如何在flutter上使用cookie发出http请求?"中的解决方案?同样,没有成功。
服务器端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
头从Flutter客户端登录。引用文件,
例如,要支持从url参数和使用Authorization标头的Basic Auth登录:
@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端点。
有关详细实施,请参阅文档。