He encontrado una pregunta similar aquí , pero la respuesta no parece funcionar para mí.
Uso Flask User (que amplía Flask Login, creo) y en su mayor parte funciona muy bien. He creado mis propias plantillas completamente nuevas para iniciar sesión y registrarse, en lugar de usar las proporcionadas. Siguiendo la documentación , he colocado estas plantillas en templates/flask_user/login.html , templates/flask_user/register.html y así sucesivamente.
También configuré USER_UNAUTHENTICATED_ENDPOINT = "login" y USER_UNAUTHORIZED_ENDPOINT = "login" en mi archivo de configuración, donde inicio de login es el nombre de mi ruta de inicio de sesión.
El problema es que si estoy desconectado e intento acceder directamente a una página que requiere que el usuario inicie sesión, se me enviará a http://localhost:5000/user/sign-in y se mostrará Flask-Login sesión en la página de inicio de sesión. Dos cosas están mal con esto: 1) Esta no es la ruta correcta para iniciar sesión y 2) Esta no es la plantilla correcta para iniciar sesión.
Estaría agradecido por cualquier ayuda que alguien pueda sugerir para esto, por favor.
EDITAR:
Código de __init__.py que inicializa la aplicación y el LoginManager:
app = Flask(__name__) @app.context_processor def inject_production_status(): return dict(production=True) # Initialise flask_login login = LoginManager(app) login.login_view = 'login' login.refresh_view = "login" login.needs_refresh_message = "Please sign in again to access this page" UserManager se define en la parte inferior de models.py :
user_manager = UserManager(app, db, User)UserManager debe inicializarse en __init__.py y no en models.py . UserManager se encargará de la inicialización de LoginManager .
Debe reemplazar en __init__.py :
# Initialize flask_login login = UserManager (app, db, User) login.login_view = 'login' login.refresh_view = "login" login.needs_refresh_message = "Please sign in again to access this page"por
# Initialize flask_user from .models.user_models import User user_manager = UserManager (app, db, User) ... # login is now accessible by user_manager.login_manager (Y eliminarlo de models.py )
Aquí hay un ejemplo: https://github.com/lingthio/Flask-User-starter-app/blob/master/app/ init .py
Irrelevante para la pregunta, pero por si acaso: a largo plazo, será más fácil para usted echar un vistazo a app.config.from_object para manejar más fácilmente las configuraciones de producción y desarrollo.
Implementé la sugerencia de @JBLaf, pero esto no resolvió el problema. Me di cuenta de que la página de inicio de sesión predeterminada que se me presentaba no era en realidad la plantilla login.html flask-login , sino su plantilla login_auth0.html . Esta era una plantilla que no había reemplazado en mi propia carpeta de usuario de flask_user , ya que no lo creí necesario.
Dos formas de resolver esto:
USER_ENABLE_AUTH0 = False . Esto hace que use la plantilla login.html , que es mi propia plantilla personalizada. Sin embargo, esto me causó problemas en el futuro porque permito inicios de sesión SSO. Así que la mejor solución fue:login-auth0.html en mi carpeta templates/flask_user , que contenga solo la línea {% include 'flask_user/login.html' %} . Ahora Flask-User intentará redirigir a la plantilla auth0, que en su lugar representará mi plantilla login.html .