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

时间:2016-02-26 17:15:15

标签: python heroku login flask secret-key

烧瓶应用程序可以登录并在localhost上注册所有罚款。但是当我把它推到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()

4 个答案:

答案 0 :(得分:7)

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

将秘密密钥放在源代码中并不是一个好主意,因为如果有人获得密钥,他们就可以恶意获取对您系统的访问权限。尝试将其存储在应用程序实例目录(snippet here)中的文件中,或将其放在环境变量(explanation here)中。

答案 1 :(得分:4)

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

现在它运作良好。

答案 2 :(得分:1)

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

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

将SESSION_TYPE配置选项设置为其他选项。选择redis,memcached,filesystem或mongodb中的一个。

将其设置为文件系统是最简单的;有足够的默认配置可以在没有其他依赖项的情况下完成工作:

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

    sess.init_app(app)

app.debug = True
app.run()

答案 3 :(得分:0)

在尝试了很多解决方案后,我在随机网站上阅读了这篇文章,但是没有任何解决方案,对于我来说,解决方案对我来说非常简单 app.secret_key ='超级密钥' 在app = Flask(名称)之后,直接不在文件底部。