¿Cuál es el punto del método “is_authenticated” usado en Flask-Login?

Estoy trabajando a través del Mega-Tutorial de Flask en este momento y he encontrado este fragmento de código:

class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), unique = True) email = db.Column(db.String(120), unique = True) role = db.Column(db.SmallInteger, default = ROLE_USER) posts = db.relationship('Post', backref = 'author', lazy = 'dynamic') 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.id) def __repr__(self): return '' % (self.nickname) 

is_authenticated, is_active y is_anonymous me parecen bastante extraños, ¿cuándo volverían a devolver algo distinto de su valor predefinido?

¿Alguien podría explicarme por qué Flask-Login me hace usar estos métodos aparentemente inútiles?

En primer lugar, is_anonymous() y is_authenticated() son inversos entre sí. Podrías definir uno como la negación del otro, si quieres.

Puede usar estos dos métodos para determinar si un usuario ha iniciado sesión.

Cuando nadie ha iniciado sesión en current_user , current_user -Login se establece en un objeto AnonymousUser . Este objeto responde a is_authenticated() e is_active() con False y a is_anonymous() con True .

El método is_active() tiene otro uso importante. En lugar de devolver siempre el valor True como lo propuse en el tutorial, puede hacerlo devolver False para los usuarios prohibidos o desactivados, y no se les permitirá iniciar sesión a dichos usuarios.

Me quedé desconcertado por este is_authenticated vs is_anonymous durante horas. No podía creer que fueran todo lo contrario. Finalmente solo por casualidad encontré esta vieja entrada de blog . Se trata de un problema en el sistema de plantillas Django en el que las variables no existentes se evalúan como False . Eso podría llevar a un comportamiento incorrecto cuando se prueba is_anonymous en el código de la plantilla. Una vez más, eso es viejo, así que no sé si se mantiene. La forma en que resolvieron el problema fue crear is_authenticated .

Supongo que Flask-Login acaba de copiar el modelo de Django sin cuestionarlo. Ahora puedo dormir en paz.