会话不可用,因为未设置密钥。将应用程序上的 secret_key 设置为唯一且机密的内容。烧瓶/英雄

新手上路,请多包涵

Flask 应用程序可以在本地主机上正常登录和注册。但是当我把它推到 heroku 时,这就成了一个问题。它显示了上述错误。这是 app.py 代码

from flask import Flask, render_template, request, redirect, jsonify, url_for, flash
from sqlalchemy import create_engine, asc, desc
from sqlalchemy.orm import sessionmaker
from database_setup import Base, User, BlogPost
from flask import session as login_session
import random
import string
from wtforms import Form, BooleanField, TextField, PasswordField, validators
from passlib.hash import sha256_crypt

app = Flask(__name__)

#Connecting to database
engine = create_engine('sqlite:///travellerdata.db')
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()

并以…结束

if __name__ == "__main__":
    app.secret_key = 'some secret key'
    app.debug = True
    app.run()

原文由 Flyn Sequeira 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

我在使用 flask-login 生成会话 ID 时遇到了同样的问题,当我直接运行它时它工作正常但当我使用 HTTP 服务器时会输出错误。原来的代码是这样的:

 if __name__ == "__main__":
    app.secret_key = os.urandom(24)
    app.run()

然后我将 app.secret_key = os.urandom(24) 移出 __name__ 并将其放在 app = Flask(__name__) 下,如下所示:

 app = Flask(__name__)
app.secret_key = os.urandom(24)

login_manager = flask_login.LoginManager()
login_manager.init_app(app)

现在它工作正常。

原文由 Yibei Huang 发布,翻译遵循 CC BY-SA 4.0 许可协议

当您的 HTTP 服务器加载您的应用程序时,很可能 __name__ 不等于 'main' 。尝试将行 app.secret_key = 'some secret key' if 块之外。

将您的密钥放在源代码中不是一个好主意,因为如果有人得到它,他们就可以恶意访问您的系统。尝试将其存储在应用程序实例目录中的文件中( 此处为代码片段)或将其放入环境变量中( 此处为解释)。

原文由 joshreesjones 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏