繁体   English   中英

当应用程序处于活动状态时(而不是在本地运行时),Flask-login 用户会被随机注销

[英]Flask-login users are being logged out at random when app is live (not when run local)

我有一个 Flask 应用程序,带有用户身份验证。 它在 venv 中运行时工作正常,但是一旦我将它部署为谷歌云应用程序,它就会开始随机注销用户,有时可能是几分钟,有时是在第一个请求中。

这是我的应用程序最核心的部分,我相信错误一定是在这里或在 App Engine 配置中。

db=SQLAlchemy()


def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = os.urandom(12)
    app.config['SQLALCHEMY_DATABASE_URI'] = "my_db_uri"
    db.init_app(app)

    from .views import views
    from .auth import auth

    app.register_blueprint(views, url_prefix='/')
    app.register_blueprint(auth, url_prefix='/')

    from .models import User

    login_manager = LoginManager(app)
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)


    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))

    return app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)


此链接应向您展示如何在生产环境中设置环境变量。 https://dev.to/sasicodes/flask-and-env-22am

我认为您缺少os.getenv() ,可以通过使用pip install python-dotenv dotenv模块并将其导入到您的文件中,无论是config.py文件还是带有应用程序引擎配置的文件。

你可以这样使用 os.getenv

`
from dotenv import load_dotenv
load_dotenv()
db=SQLAlchemy()


def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = os.getenv("my_secret_key")
    app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("my_db_uri")
    db.init_app(app)

    from .views import views
    from .auth import auth

    app.register_blueprint(views, url_prefix='/')
    app.register_blueprint(auth, url_prefix='/')

    from .models import User

    login_manager = LoginManager(app)
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)


    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))

    return app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

`

我正在使用 os.urandom() 在设置文件中生成随机密钥。

当我将其更改为字符串时,问题就解决了。

我猜问题是 App Engine 正在运行多个实例并且不时获得不同的密钥,这使得 session cookie 无效,因此清除了 cookie 内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM