Maintenant on assemble tout (WTForm + SQLAlchemy + Flask-Login).
from flask_login import login_user, logout_user, login_required, current_user
# --- INSCRIPTION (REGISTER) ---
@app.route('/register', methods=['GET', 'POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('home')) # Déjà connecté
form = RegistrationForm()
if form.validate_on_submit():
# 1. Hacher le mot de passe
hashed_pw = generate_password_hash(form.password.data)
# 2. Créer l'user
user = User(username=form.username.data, email=form.email.data, password=hashed_pw)
# 3. Sauvegarder
db.session.add(user)
db.session.commit()
flash('Compte créé ! Connectez-vous.', 'success')
return redirect(url_for('login'))
return render_template('register.html', form=form)
# --- CONNEXION (LOGIN) ---
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = LoginForm()
if form.validate_on_submit():
# 1. Chercher l'user par email
user = User.query.filter_by(email=form.email.data).first()
# 2. Vérifier le mot de passe
if user and check_password_hash(user.password, form.password.data):
# 3. Connecter l'user !
login_user(user, remember=form.remember.data) # remember=True garde le cookie plus longtemps
# Rediriger vers la page demandée à l'origine (ou home par défaut)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('home'))
else:
flash('Login ou mot de passe incorrect', 'danger')
return render_template('login.html', form=form)
# --- DÉCONNEXION (LOGOUT) ---
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('home'))
# --- PAGE PROTÉGÉE ---
@app.route('/compte')
@login_required # <-- Magie ! Rejette si pas connecté
def account():
return render_template('account.html')
Dans les templates, tu peux utiliser current_user :
{% if current_user.is_authenticated %}
Salut {{ current_user.username }} ! <a href="{{ url_for('logout') }}">Déconnexion</a>
{% else %}
<a href="{{ url_for('login') }}">Connexion</a>
{% endif %}