Ceci est une ancienne révision du document !
Système de login simple sans utiliser le paquet Flask-Login (pour l'instant )
<form method="POST"> <h1>Veuillez vous identifier</h1> <label for="login">Login</label> <input type="text" name="login" id="login" placeholder="Nom ou adresse email" required autofocus /> <label for="password">Mot de passe</label> <input type="password" id="password" name="password" required /> <button type="submit">Connexion</button> </form>
from flask import request, session, redirect, flash from flask import render_template, url_for from werkzeug.security import generate_password_hash, check_password_hash
@app.route("/login", methods=['GET']) def login(): return render_template("login.html")
Le mot de passe est stocké sous forme hashée par generate_password_hash.
On utilise check_password_hash pour comparer le mot de passe entré.
En cas de réussite, le nom d'utilisateur est stocké dans session[“login”].
@app.route("/login", methods=['POST']) def login_check(): # Lire les valeurs reçues du formulaire login = request.form.get('login') password = request.form.get('password') success = False # Rechercher l'utilisateur selon son login user = recherche_selon_login(login) # La fonction renvoie le login et la version hashée du mot de passe if user: # On la compare avec la version hashée du password entré if check_password_hash(user['password'], password): # Si cela correspond, on enregistre le login dans la session success = True session["login"] = user['login'] flash(u"Vous êtes connecté", "success") # Si success est resté à False, le login n'est pas trouvé ou le mot de # passe ne correspondait pas. if not success: flash(u"Le mot de passe est incorrect...", "error") return redirect(request.url) return redirect(url_for('home'))
On supprime simplement la valeur session[“login”], puis on redirige vers la page d'accueil.
@app.route("/logout") def logout(): session.pop("login", None) return redirect(url_for('home'))
À chaque requête, l'utilisateur est lu sur base de la valeur de session[“login”] afin de le stocker dans la variable g.
@app.before_request def before_request(): # Rechercher l'utilisateur selon son login user = recherche_selon_login(session["login"]) # La valeur renvoyée peut être un objet contenant les propriétés # de l'utilisateur, ses droits, etc... if user: g.current_user = user else: g.current_user = None