====== Activité : authentifier des utilisateurs avec Flask ====== Ressources : https://pythonspot.com/login-authentication-with-flask/ ===== Le module session ===== Le module session de Flask permet de gérer des **sessions utilisateur** : * **ouvrir** une session en authentifiant un utilisateur à partir de **nom de compte** et d'un** mot de passe**, * pouvoir **fermer** sa session en se déconnectant, * **mémoriser** dans la session **des variables** qui seront alors utilisables pour **toutes les pages**. ===== Préparation du projet ===== * je crée un dossier **projet** ; * dans le dossier **projet** je crée le fichier python de l'application **app.py** ; * dans le dossier **projet**, je crée un sous-dossier **templates** ; * dans le sous-dossier **templates** je crée : * une page **login.html** qui servira à saisir son **nom de compte** et son ** mot de passe**. * une page **index.html** qui sera accessible uniquement si l'utilisateur s'est authentifié. Le sous-dossier templates va contenir toutes les pages html du projet ==== Le résultat à obtenir ==== {{:isn:flask_07.png|}} ===== Le fichier python de l'application ===== * Ecrivez le contenu suivant dans le fichier **app.py** : #! /usr/bin/python # -*- coding:utf-8 -*- from flask import Flask, render_template, request, redirect, url_for, session app = Flask(__name__) username = 'charles' # compte password = 'motdepasse' # mot de passe du compte @app.route('/') def index(): # verification de l'existence d'une session en testant si la variable authentifie est vraie if not session.get('authentifie'): return render_template('login.html') else: return render_template('index.html', message = session['username']) @app.route('/login', methods=['POST']) def login(): # vérification du compte et du mot de passe if request.form['username'] == username and request.form['password'] == password: session['authentifie'] = True session['username'] = username else: return render_template('login.html', message = "Erreur de compte ou de mot de passe !") return redirect(url_for('index')) @app.route("/logout") def logout(): # deconnexion session['authentifie'] = False return redirect(url_for('index')) if __name__ == '__main__': # il faut définir une clé secrete app.secret_key = 'laclesecrete' app.run(debug=True, host='0.0.0.0', port=5005) ==== Explications des instructions ==== * La vue index teste si la variable **authentifie** n'existe pas en utilisant le mot clé **not** : if not session.get('authentifie'): * si c'est le cas la page **login.html** est affichée pour pouvoir s'authentifier ; * sinon la page **index.html** est affichée avec le nom du compte. * la vue **login()** vérifie le nom du compte et le mot de passe saisis dans le formulaire de la page **login.html** : * si les informations sont correctes, les deux variables de session **authentifie** et **username** sont renseignées. La variable **session** est un dictionnaire. * Pour se déconnecter, la vue **logout()** renseigne la variable de session **authentifie** avec la valeur **False** ===== La page d'authentification login.html ===== * la page d'authentification en utilisant avec les **styles de Bootstrap** : Application Login

Authentification

{{message}}
===== La page index.html affichée si l'authentification est réussie ===== Application Login

Authentification réussie

Bonjour {{message}}.
Se déconnecter.
==== Retour à l'activité : Utiliser le framework Flask pour créer un site Web dynamique ==== * [[.:flask_01|Activité : Utiliser le framework Flask pour créer un site Web dynamique]]