Fix: handle stale sessions and migrated users without household_id

This commit is contained in:
agentbox
2026-07-31 22:02:06 +00:00
parent a318b577cb
commit 1e57a886f4
2 changed files with 10 additions and 4 deletions
+3 -2
View File
@@ -31,13 +31,14 @@ def login():
flash("Invalid username or password.", "error") flash("Invalid username or password.", "error")
return render_template("login.html") return render_template("login.html")
household = get_household_by_id(user["household_id"]) household_id = user["household_id"]
household = get_household_by_id(household_id) if household_id else None
session.clear() session.clear()
session["user_id"] = user["id"] session["user_id"] = user["id"]
session["username"] = user["username"] session["username"] = user["username"]
session["is_admin"] = bool(user["is_admin"]) session["is_admin"] = bool(user["is_admin"])
session["household_id"] = user["household_id"] session["household_id"] = household_id
session["household_name"] = household["name"] if household else "Unknown" session["household_name"] = household["name"] if household else "Unknown"
return redirect(url_for("meals.dashboard")) return redirect(url_for("meals.dashboard"))
+7 -2
View File
@@ -18,12 +18,13 @@ meals_bp = Blueprint("meals", __name__)
def login_required(f): def login_required(f):
"""Decorator: redirect to login if not authenticated.""" """Decorator: redirect to login if not authenticated or session is stale."""
from functools import wraps from functools import wraps
@wraps(f) @wraps(f)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
if "user_id" not in session: if "user_id" not in session or "household_id" not in session:
session.clear()
return redirect(url_for("auth.login")) return redirect(url_for("auth.login"))
return f(*args, **kwargs) return f(*args, **kwargs)
@@ -51,6 +52,10 @@ def dashboard():
except ValueError: except ValueError:
flash("Invalid date format. Use YYYY-MM-DD.", "error") flash("Invalid date format. Use YYYY-MM-DD.", "error")
if household_id is None:
session.clear()
return redirect(url_for("auth.login"))
data = get_dashboard_data(today, household_id) data = get_dashboard_data(today, household_id)
return render_template( return render_template(
"dashboard.html", "dashboard.html",