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

问题描述 投票:13回答:2

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

  • 在托管上工作正常
  • 在我的本地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成功登录用户)。

python flask flask-login
2个回答
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
投票

会议管理会议......

  • 您使用的是基于客户端的会话管理吗? 可能存在的问题,例如: cookie sizetoo much data in cookie 服务器密钥的可能问题,例如每次都生成一个新的密钥
  • 您使用的是基于服务器的会话管理(例如flask-kvsession)吗? 尝试访问与prod相同的后端的可能问题,例如防火墙阻止访问redis服务器

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

© www.soinside.com 2019 - 2024. All rights reserved.