Aller au contenu principal

3 formations sont désormais disponibles : Python, Flask et JS.

Aller au contenu principal

Inscription, Connexion, Déconnexion

Apprendre Flask : Le Guide Ultime
3 min de lecture
Gratuit

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 %}