Zum Hauptinhalt springen

Login und geschützte Routen

Login (Skizze)

from flask import session, request, redirect, url_for
from werkzeug.security import check_password_hash

@app.post("/login")
def login():
username = (request.form.get("username") or "").strip()
password = request.form.get("password") or ""
# user = aus DB laden...
# if user and check_password_hash(user["password_hash"], password):
# session["user_id"] = user["id"]
# return redirect(url_for("dashboard"))
return "Login fehlgeschlagen", 401

Schutz

from functools import wraps
from flask import session, redirect, url_for

def login_required(view):
@wraps(view)
def wrapped(*args, **kwargs):
if "user_id" not in session:
return redirect(url_for("login_form"))
return view(*args, **kwargs)
return wrapped

@app.get("/dashboard")
@login_required
def dashboard():
return "Geheimbereich"

Rate mal!

Reicht Verstecken des Links im Menü?

Auflösung

Nein – die Route muss serverseitig prüfen.

Probiere es selbst

Experiment 1

session user_id setzen.

Experiment 2

Dashboard ohne Login blocken.

Experiment 3

Logout clear.

Übungen

Level 1

login_required Idee.

Level 2

Redirect bei fehlendem Login.

Level 3

Decorator skizzieren.

Level-2-Lösung
if "user_id" not in session:
return redirect(url_for("login_form"))

Mini-Quiz

Mini-QuizWas passiert ohne Login auf /dashboard idealerweise?

Login sitzt! Mini-Projekt: Login-Bereich.