Solución:
Tengo el mismo problema cuando utilizo flask-login para generar una ID de sesión, funciona bien cuando lo ejecuto directamente, pero generará un error cuando uso el servidor HTTP. El código original es como:
if __name__ == "__main__":
app.secret_key = os.urandom(24)
app.run()
Entonces me mudé app.secret_key = os.urandom(24)
fuera de __name__
y ponerlo debajo app = Flask(__name__)
como esto:
app = Flask(__name__)
app.secret_key = os.urandom(24)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
Y funciona bien ahora.
Es probable que cuando su servidor HTTP esté cargando su aplicación, __name__
no es igual a 'main'
. Intenta mover la línea app.secret_key = 'some secret key'
fuera del bloque if.
No es una buena idea poner su clave secreta en el código fuente porque si alguien la obtiene, puede obtener acceso a su sistema de manera maligna. Intente almacenarlo en un archivo en el directorio de instancias de la aplicación (fragmento aquí) o colóquelo en una variable de entorno (explicación aquí).
La excepción la genera la implementación de la sesión NullSessionInterface, que es el tipo de sesión predeterminado cuando usa Flask-Session. Eso es porque nunca le das la configuración SESSION_TYPE a Flask; no es suficiente establecerlo como global en su módulo.
Este valor predeterminado no tiene mucho sentido con Flask 0.10; puede haber tenido sentido con Flask 0.8 o 0.9, pero la versión actual se usa como una señal de error. En su caso, ahora le da el mensaje de error incorrecto.
Establezca la opción de configuración SESSION_TYPE en otra cosa. Elija uno de redis, memcached, filesystem o mongodb.
Configurarlo en el sistema de archivos es más fácil; hay suficiente configuración predeterminada para que funcione sin dependencias adicionales:
if __name__ == "__main__":
app.secret_key = 'super secret key'
app.config['SESSION_TYPE'] = 'filesystem'
sess.init_app(app)
app.debug = True
app.run()