会话不可用,因为未设置密钥。将应用程序上的 secret_key 设置为唯一且保密的内容。 Flask/Heroku

the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret. Flask/Heroku

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()

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

将您的密钥放在源代码中不是一个好主意,因为如果有人得到它,他们就可以恶意访问您的系统。尝试将其存储在应用程序实例目录 (snippet here) or putting it in an environment variable (explanation here) 的文件中。

我在使用 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)

现在可以正常使用了。

异常是由 NullSessionInterface 会话实现引发的,它是您使用 Flask-Session 时的默认会话类型。那是因为你实际上并没有将 SESSION_TYPE 配置给 Flask;将其设置为模块中的全局变量是不够的。

这个默认值对于 Flask 0.10 没有多大意义;它可能对 Flask 0.8 或 0.9 有意义,但当前版本用作错误信号。在你的情况下,它现在给你错误的错误信息。

将 SESSION_TYPE 配置选项设置为其他值。选择 redis、memcached、文件系统或 mongodb.

之一

设置为文件系统最简单;那里有足够的默认配置,无需其他依赖项即可工作:

if __name__ == "__main__":
    app.secret_key = 'super secret key'
    app.config['SESSION_TYPE'] = 'filesystem'

    sess.init_app(app)

app.debug = True
app.run()

我在尝试了很多解决方案后在随机网站上阅读了这篇文章,但没有任何效果解决方案对我来说非常简单,我只是把 app.secret_key = 'super secret key' app = Flask(name) 后直接不在文件底部.