Bou*_*uni 5 python identity flask flask-login flask-principal
我使用Flask-Login和Flask-Principal处理Flask应用程序,除了记住Flask-Login的功能外,一切正常.
实际上,remember me函数在Flask-Login端工作,但Flask-Principal的idenity_loaded函数不会被触发.
当我记录@ login_manager.user_loader和@ identity_loaded.connect的调用时,看到我登录时都被调用,但是当我关闭浏览器并再次启动它时,只会调用@ login_manager.user_loader.所以我的用户基本上登录但没有角色.
Flask-Login 在GitHub上有一个已关闭的问题#19,但它实际上没有回答我的问题: - /
有人知道如何在用户从cookie加载时做出反应吗?
在 before_request 上,flask-principal一次运行一个identity_loaders,直到找到任何身份。如果没有找到任何身份,identity_loaded则不会被调用。
默认情况下,第一个identity_loader始终是会话加载程序。
当您重新启动浏览器时,会话将消失,因此flask-principal无法加载任何身份,因此您的identity_loaded回调将不会被调用。但您仍然登录,因为flask-logincookie 'remember_token' 将在 31 天后过期。
因此,为了摆脱这种特性,您可以添加 new identity_loader,它只会在会话过期时运行。
principal = Principal(app)
@principal.identity_loader
def load_identity_when_session_expires():
if hasattr(current_user, 'id'):
return Identity(current_user.id)
Run Code Online (Sandbox Code Playgroud)