![](/img/trans.png)
[英]Flask-Login package is broken by importing Google App Engine's testbed
[英]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.