Flask-Login:在本地计算机上不起作用,但在托管上很好

Emm*_*t B 13 python flask flask-login

我有一个烧瓶应用程序,我使用烧瓶登录,按照教程(没有什么花哨在这里)

  • 在托管上工作正常
  • 在我的本地MAC计算机上工作正常(在家里)
  • 在我的本地Linux计算机上不起作用(在办公室,可能在防火墙后面,但我能够进行端口转发并连接到数据库)
  • 不适用于Chrome或Firefox
  • 如果我服务localhost而不是127.0.0.1.
from flask.ext.login import LoginManager 

login_manager = LoginManager()
login_manager.session_protection = "strong"
login_manager.init_app(app)
login_manager.login_view = 'login'

def login():
    error = None
    form = LoginForm()

    if request.method == 'POST':
        user = db.users.find_one({"username": form.username.data})
        pass_hash = generate_password_hash(form.password.data)

        if user and User.validate_login( pass_hash,  user['password'] ):
            user_obj = User(user['username'])
            session['logged_in'] = True
            login_user(user_obj,remember=True)
            flash("Logged in successfully", category='success')
            print 'logged in: OK'

            #return redirect(request.args.get("next") or url_for("index"))
            return redirect( url_for("index"))
        error = 'Invalid credentials'
    return render_template('login.html', title='login', **locals())
Run Code Online (Sandbox Code Playgroud)

好吧,当我输入错误密码时,它会出现"凭证无效"错误.当我正确输入密码时,我没有看到"登录成功"闪存,但在控制台上我看到"登录确定".所以DB连接没有问题.但是我没有登录.例如,

g.user.is_authenticated()
Run Code Online (Sandbox Code Playgroud)

在模板中给出false(这只发生在我的本地Linux上,另一方面托管和MAC成功登录用户).

kni*_*ite 2

您在浏览器中的何处以及如何保存会话?

考虑存储在生产域的浏览器 cookie 中的会话example.com,您也在本地配置了该会话(通过向文件添加覆盖/etc/hosts)。

如果您的办公室服务器配置为使用不同的子域(例如 )office.example.com,并REMEMBER_COOKIE_DOMAIN设置为example.com,则办公室服务器将无法读取 cookie。修复方法是使用跨域 cookie:(REMEMBER_COOKIE_DOMAIN=.example.com注意前面的点)。

参考: https: //flask-login.readthedocs.org/en/latest/#cookie-settings