我正在开发一个小型Web应用程序。我正在使用https://pythonhosted.org/Flask-OAuth库进行Google社交身份验证。另外,Flask-Login
。我已成功设置授权回调并授权用户。我也可以使用login_user(user, remember=True)
成功登录用户。
这会创建一个名为remember_token
的Cookie,有效期为365天。但是,当我关闭浏览器(Firefox,Chrome)和重新打开我的应用程序时会出现问题。
在Firefox中使用Tools->Privacy->Remove Individual Cookies
,我可以看到remember_token cookie。但是,当我导航到索引页/
时,我已经设置了这个函数..
@main.route('/', methods=['GET', 'POST'])
def index():
if current_user.is_authenticated:
print_debug('User is authenticated in /')
return redirect(url_for('.home'))
else:
return render_template('index.html')
@main.route('/home', methods=['GET', 'POST'])
@login_required
def home():
do_something()
Navingating to /
打印调试信息,并成功重定向到/home
。但是,此重定向被@login_required
拦截,我被重定向到/google-login?next=%2Fhome
,要求我再次登录。此外,remember_token
也会在此阶段删除。我在Firefox中检查后确认了它。
我无法理解为什么记住功能无法正常工作。或者为什么要删除remember_token
。我之间没有做任何事情。一步一步,
@login_required
都有效。 localhost:5000
还有一个Cookie名称remember_token
。current_user.is_authenticated
上的第一个/
返回
是的,从这一点开始,每个@login_required都会要求
重新登录。我正在使用Flask-sqlalchemy和MySQL作为数据库。我的用户模型是
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
password_hash = db.Column(db.String(128))
username = db.Column(db.String(128), unique=True, index=True)
我的用户加载器
@login_manager.user_loader
def load_user(user_id):
print_debug("User loader called with id %s" % user_id)
return User.query.get(int(user_id))
任何帮助都会非常感激。
谢谢!