current_user.is_authenticated no funciona en flask_login.
Estoy usando flasklogin para hacer la autenticación y algo en mi login no funciona. De hecho, el atributo actual del usuario siempre es falso (o anonymousUserMixin…). He intentado cambiar algo pero no funcionó. Creo que hay algunos problemas con la parte login_user(user).
@login_manager.user_loader
def load_user(user_id):
try:
return User.query.get(user_id)
except:
return None
Este es mi enrutamiento de inicio de sesión:
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect('profile', username=current_user.user_id)
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
user = User.query.filter_by(email=email).first()
pass_hashed = form.password.data
if user:
flash("user.password, pass_hashed" + user.password + " " + pass_hashed, category="error")
if pass_hashed == user.password:
usr = UserData.query.filter_by(email=email).first()
login_user(user, remember=form.remember.data)
session['username'] = usr.username
next = request.args.get('next')
# if not is_safe_url(next):
# return abort(400)
# return redirect(next or url_for('index'))
username = usr.username
return redirect(url_for('profile', username=username))
flash("wrong password", category="error")
return redirect(url_for('login'))
flash("invalid email", category="error")
return redirect(url_for('login'))
return render_template('login.html', form=form)
Y este es mi modelo de usuario:
“`
class User(db.Model, UserMixin):
<strong>tablename</strong> = 'user'
user_id = db.Column(db.Integer(), autoincrement=True)
email = db.Column(db.String(120), primary_key=True, unique=True, nullable=False)
password = db.Column(db.String(200), nullable=False)
<pre><code>def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.user_id)
def get(self, id):
return unicode(self.user_id)
def __repr__(self):
return '<Email %r>' % self.email
def check_password(self, password):
if self.password == password:
return True
else:
return False
</code></pre>
“`
davy.ai
Parece que el problema se encuentra en la llamada a la función
login_user(user)
en la ruta de inicio de sesión.Una solución posible sería asegurarse de que el objeto User que se está pasando a
login_user
sea un objeto de usuario válido con un identificador único. En el código actual, parece que la funciónget_id()
en el modelo de User está devolviendo un objeto unicode en lugar de un entero, lo que podría estar causando problemas con el proceso de autenticación.Otro posible problema podría estar relacionado con la función
user_loader
. Es posible que no esté devolviendo un objeto User válido para el user_id dado. Una solución sería agregar algunas declaraciones de depuración a la funciónload_user
para asegurarse de que esté cargando correctamente el objeto User desde la base de datos.Si ninguna de estas soluciones funciona, podría ser útil depurar el código agregando algunas declaraciones de impresión para rastrear los valores de
current_user
,user
yusr
durante todo el proceso de inicio de sesión.