====== LU06.A05 - Authentifizierung für die ToDo-Liste API mit Flask-Login ======
Deine Aufgabe ist es, der bereits erstellten RESTful API für die ToDo-Liste eine Authentifizierungsfunktionalität hinzuzufügen. Dazu sollst du Flask-Login verwenden.
===== Vorgehen =====
==== 0. Vorbereiten ====
* Akzeptiere das GitHub Classroom Assignment
* Klone dein persönliches Repository in die Entwicklungsumgebung
==== 1. Integriere Flask-Login ====
=== Installiere Flask-Login ===
Füge ''Flask-Login >= 0.6.3'' in deine requirements.txt Datei hinzu und installiere es.
=== Initialisiere Flask-Login in deiner Hauptanwendung===
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
==== 2. User-Klasse Erstellen ====
* Ergänze deine ''User''-Klasse, um die Methoden und Eigenschaften, die von Flask-Login erwartet werden, zu implementieren. Du kannst dies tun, indem du deine Klasse von ''UserMixin'' erbst.
* Erstelle eine ''UserDao''-Klasse um den User in die Datenbank zu speichern und daraus zu lesen.
==== 3. Implementiere die ''user_loader''-Funktion ====
* Erstelle eine Funktion, die die ''user_loader''-Anforderungen erfüllt.
@login_manager.user_loader
def load_user(user_id):
return user_dao.get_user_by_id(int(user_id))
==== 4. Schütze die ToDo-Endpunkte ====
* Füge dem ''@login_required''-Dekorator zu deinen ToDo-Endpunkten hinzu, um sicherzustellen, dass nur authentifizierte Benutzer darauf zugreifen können.
from flask_login import login_required
@app.route('/todos', methods=['GET'])
@login_required
def get_all_todos():
# Dein Code hier
==== 5. Implementiere ''Login'' und ''Logout'' Endpunkte ====
* Erstelle Endpunkte für ''Login'' und ''Logout'', die die Methoden von Flask-Login verwenden.
from flask_login import login_user, logout_user
@app.route('/login', methods=['POST'])
def login():
# Dein Code hier
@app.route('/logout', methods=['POST'])
def logout():
# Dein Code hier
==== 6. Teste deine API ====
Via ''API-Testing.http''-File im Workspace
oder via: [[https://app.getpostman.com/run-collection/21916156-7e24c1ab-b771-4f36-9bf9-9efda9b55507?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D21916156-7e24c1ab-b771-4f36-9bf9-9efda9b55507%26entityType%3Dcollection%26workspaceId%3D6159a5bd-9101-4933-a6c3-05d2eb3112fd|{{https://run.pstmn.io/button.svg|Run in Postman}}]]
==== 7. Abgabe ====
Die Abgabe der Lösung erfolgt als Push in das persönliche GitHub-Repository.
----
//=> GitHub Repo für externe Besucher//
GitHub Repository https://github.com/templates-python/m323-lu06-a05-authentication
//Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden//
[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi