Gérer les sessions à la main (session['user_id'] = 1), c'est faisable, mais chiant.
Comment on gère le "Se souvenir de moi" ? Comment on protège une route ? Comment on sait qui est connecté ?
Flask-Login est là pour ça.
Installation
pip install flask-login
Configuration (app.py)
from flask_login import LoginManager, UserMixin
login_manager = LoginManager(app)
login_manager.login_view = 'login' # La route où rediriger si l'utilisateur n'est pas connecté
login_manager.login_message_category = 'info'
Adapter le Modèle User
Pour que Flask-Login fonctionne, notre classe User doit implémenter certaines méthodes (is_authenticated, etc.).
Heureusement, UserMixin fait tout pour nous.
# Dans models.py ou app.py
from flask_login import UserMixin
class User(db.Model, UserMixin): # <-- On ajoute UserMixin
id = db.Column(db.Integer, primary_key=True)
# ... le reste ...
Le User Loader
Flask-Login a besoin de savoir comment charger un utilisateur depuis la base de données à partir de son ID (stocké dans le cookie).
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
C'est tout pour la config !