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

时间:2015-07-06 05:10:46

标签: python flask flask-login

我有一个烧瓶应用程序,我使用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())

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

g.user.is_authenticated()

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

2 个答案:

答案 0 :(得分:1)

您在浏览器中保存会话的位置和方式是什么?

考虑存储在生产域example.com的浏览器cookie中的会话,您还在本地配置了该会话(通过向您的/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

答案 1 :(得分:1)

随着会话进入会话管理......

  • 您使用的是基于客户端的会话管理吗?
  • 您使用的是基于服务器的会话管理(例如flask-kvsession)吗?
    • 尝试访问与prod相同的后端的可能问题,例如防止访问redis服务器的防火墙

您可能在尝试访问开发服务器时尝试存储更多会话数据(例如,更长的服务器URL,调试数据等等),这对于在会话管理上进行会话管理时可能很难处理。客户端。

相关问题