在 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 端点。
具体实现请参考文档
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 端点。
具体实现请参考文档