保持flask_login会话处于颤动状态



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端点。

有关详细实施,请参阅文档。

最新更新