Flask-login es capaz de iniciar sesión del usuario, pero todavía utiliza AnonymousUserMixin para todas las solicitudes posteriores.
Soy capaz de iniciar sesión y autenticar al usuario con éxito, y puedo acceder a su información mediante current_user
desde el método de inicio de sesión. Pero luego, cuando realizo otra llamada a la API e intento acceder a current_user
, obtengo un error y current_user
es de tipo AnonymousUserMixin
.
Pensé que el problema podría estar en la función load_user
, así que agregué una declaración de impresión, pero parece que nunca se ejecuta.
¿Hay algo mal en la configuración a continuación que evitaría que load_user
se ejecute cuando se realiza una llamada a la API o que cause que la sesión del usuario no se mantenga?
# app.py
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
print("[LoadUser]")
return Users.query.get(user_id)
@app.route("/login")
def login():
user = Users(
id=unique_id, name=users_name, email=users_email
)
login_user(user, remember=True)
print(current_user.username) # Funciona sin problemas
return
@app.route("/test")
def test():
print(current_user.username) # AttributeError: el objeto 'AnonymousUserMixin' no tiene el atributo 'username'
davy.ai
Parece que el problema está relacionado con la sesión no se mantiene entre las solicitudes. La función
load_user
debe ejecutarse cuando se realiza una llamada a la API si todo está configurado correctamente.Para asegurarse de que la sesión persista, asegúrese de estar utilizando una biblioteca de sesiones como Flask-Session o la administración de sesiones predeterminada de Flask-Login. Además, asegúrese de que la
SECRET_KEY
esté configurada en la configuración de su aplicación.Otro posible problema podría estar relacionado con la inicialización del
login_manager
. Asegúrese de inicializarlo con la instancia de la aplicación y no con un blueprint.Además, verifique que la ruta
test
solo sea accesible para usuarios autorizados utilizando el decorador@login_required
.Con estos cambios, la función
load_user
debería ser llamada cuando se realice una llamada a la API y la sesión del usuario debería persistir entre las solicitudes.