我正在为我的项目使用Flask-Login(版本0.2.11)。我把它初始化为:
from flask.ext import login
from project import app
from project.database import db
from project.modules.user import User, Anonymous
login_manager = login.LoginManager()
login_manager.init_app(app)
login_manager.anonymous_user = Anonymous
login_manager.login_view = 'frontend.login'
@login_manager.user_loader
def load_user(id):
print('USER LOADER CALLED')
return User.query.get( int(id) )
User
是UserMixin
和数据库模型的子类。
当我为有效用户调用login_user
方法时,它返回true。 login_required
装饰器也按预期工作。
但是,即使在提交登录表单后,我的模板中的current_user
仍然是Anonymous的实例。 load_user
中的调试语句永远不会打印出来。我根本无法访问受login_required装饰器保护的页面。
我的其他代码不会修改session
,因此我认为这不是导致此问题的原因。 SECRET_KEY在配置中设置。
那么,我的初始化代码出了什么问题?
编辑:如果我将“remember = True”传递给该函数,我似乎能够登录。但是,在没有“记住我”选项的情况下登录是行不通的。
编辑(2):似乎没有“记住我”的登录在基于Chromium / WebKit的浏览器(Opera 31.0,Vivaldi,Chrome)中不起作用。但是,它确实可以在Firefox中使用。
解决方案:问题是在127.0.0.1
而不是localhost
上运行应用程序 - Chrome无法正确处理通过其IP地址访问的网页的Cookie。