会话不可用,因为未设置密钥。将应用程序上的 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) 后直接不在文件底部.
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) 后直接不在文件底部.