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)
|
||||
|
||||
if code and totp.verify(code):
|
||||
login_user(user)
|
||||
session.pop("mfa_user", None)
|
||||
# Trusted Device speichern wenn gewünscht
|
||||
remember_days = request.form.get("remember")
|
||||
if remember_days:
|
||||
@@ -604,28 +606,22 @@ def mfa_verify():
|
||||
days = int(remember_days)
|
||||
if 1 <= days <= 365:
|
||||
token = secrets.token_urlsafe(32)
|
||||
expires = datetime.now().isoformat()
|
||||
exp_date = datetime.now()
|
||||
exp_date = exp_date + timedelta(days=days)
|
||||
exp_date = datetime.now() + timedelta(days=days)
|
||||
expires = exp_date.isoformat()
|
||||
users_data = load_users()
|
||||
trusted = users_data.setdefault(email, {}).setdefault("trusted_devices", [])
|
||||
trusted.append({"token": token, "expires": expires})
|
||||
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,
|
||||
path="/",
|
||||
httponly=True, samesite="Lax",
|
||||
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
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
login_user(user)
|
||||
session.pop("mfa_user", None)
|
||||
add_history_entry("user_login", f"User '{email}' angemeldet (mit MFA)", email)
|
||||
if user.must_change_password:
|
||||
return redirect("/change-password")
|
||||
|
||||
Reference in New Issue
Block a user