Fix: Trusted-Device-Cookie wurde nicht korrekt gespeichert
- Cookie path explizit auf '/' gesetzt - login_user() vor Cookie-Setzung aufgerufen (konsistenter Zustand) - Kein Überschreiben der Response mehr bei must_change_password
This commit is contained in:
18
app.py
18
app.py
@@ -597,6 +597,8 @@ def mfa_verify():
|
|||||||
totp = pyotp.TOTP(user.mfa_secret)
|
totp = pyotp.TOTP(user.mfa_secret)
|
||||||
|
|
||||||
if code and totp.verify(code):
|
if code and totp.verify(code):
|
||||||
|
login_user(user)
|
||||||
|
session.pop("mfa_user", None)
|
||||||
# Trusted Device speichern wenn gewünscht
|
# Trusted Device speichern wenn gewünscht
|
||||||
remember_days = request.form.get("remember")
|
remember_days = request.form.get("remember")
|
||||||
if remember_days:
|
if remember_days:
|
||||||
@@ -604,28 +606,22 @@ def mfa_verify():
|
|||||||
days = int(remember_days)
|
days = int(remember_days)
|
||||||
if 1 <= days <= 365:
|
if 1 <= days <= 365:
|
||||||
token = secrets.token_urlsafe(32)
|
token = secrets.token_urlsafe(32)
|
||||||
expires = datetime.now().isoformat()
|
exp_date = datetime.now() + timedelta(days=days)
|
||||||
exp_date = datetime.now()
|
|
||||||
exp_date = exp_date + timedelta(days=days)
|
|
||||||
expires = exp_date.isoformat()
|
expires = exp_date.isoformat()
|
||||||
users_data = load_users()
|
users_data = load_users()
|
||||||
trusted = users_data.setdefault(email, {}).setdefault("trusted_devices", [])
|
trusted = users_data.setdefault(email, {}).setdefault("trusted_devices", [])
|
||||||
trusted.append({"token": token, "expires": expires})
|
trusted.append({"token": token, "expires": expires})
|
||||||
save_users(users_data)
|
save_users(users_data)
|
||||||
resp = redirect("/admin")
|
add_history_entry("user_login", f"User '{email}' angemeldet (mit MFA, Gerät für {days} Tage gespeichert)", email)
|
||||||
|
target = "/change-password" if user.must_change_password else "/admin"
|
||||||
|
resp = redirect(target)
|
||||||
resp.set_cookie("mfa_trust", token, max_age=days * 86400,
|
resp.set_cookie("mfa_trust", token, max_age=days * 86400,
|
||||||
|
path="/",
|
||||||
httponly=True, samesite="Lax",
|
httponly=True, samesite="Lax",
|
||||||
secure=False)
|
secure=False)
|
||||||
login_user(user)
|
|
||||||
session.pop("mfa_user", None)
|
|
||||||
add_history_entry("user_login", f"User '{email}' angemeldet (mit MFA, Gerät für {days} Tage gespeichert)", email)
|
|
||||||
if user.must_change_password:
|
|
||||||
resp = redirect("/change-password")
|
|
||||||
return resp
|
return resp
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
login_user(user)
|
|
||||||
session.pop("mfa_user", None)
|
|
||||||
add_history_entry("user_login", f"User '{email}' angemeldet (mit MFA)", email)
|
add_history_entry("user_login", f"User '{email}' angemeldet (mit MFA)", email)
|
||||||
if user.must_change_password:
|
if user.must_change_password:
|
||||||
return redirect("/change-password")
|
return redirect("/change-password")
|
||||||
|
|||||||
Reference in New Issue
Block a user