Flask-login记不起作用

时间:2016-06-20 09:17:08

标签: python cookies flask flask-login flask-oauthlib

我正在开发一个小型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都有效。
  • 当我关闭浏览器并重新打开时,直到我没有打开我的webapp 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))

任何帮助都会非常感激。

谢谢!

0 个答案:

没有答案