Compare commits

...

2 Commits

Author SHA1 Message Date
Fusion c3e2264771 debug: add logging to auth /me endpoint to diagnose login loop 2026-05-19 23:25:30 +02:00
Fusion 76741d3ee6 debug: add logging to settings save to diagnose issue 2026-05-19 23:21:48 +02:00
3 changed files with 17 additions and 0 deletions
+10
View File
@@ -164,20 +164,30 @@ async def me(
session_cookie: str | None = Cookie(default=None, alias="session"), session_cookie: str | None = Cookie(default=None, alias="session"),
session: AsyncSession = Depends(get_db_session), session: AsyncSession = Depends(get_db_session),
) -> dict[str, Any]: ) -> dict[str, Any]:
logger.info("Auth /me called, cookie present: %s", bool(session_cookie))
if not session_cookie: if not session_cookie:
logger.warning("Auth /me: missing session cookie")
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="missing session") raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="missing session")
settings = Settings() settings = Settings()
logger.info("Auth /me: cookie_domain=%s, cookie_secure=%s, cookie_samesite=%s",
settings.cookie_domain, settings.cookie_secure, settings.cookie_samesite)
try: try:
payload = decode_session_cookie(settings=settings, cookie_value=session_cookie) payload = decode_session_cookie(settings=settings, cookie_value=session_cookie)
user_id = payload["user_id"] user_id = payload["user_id"]
logger.info("Auth /me: decoded session for user_id=%s", user_id)
except ValueError as exc: except ValueError as exc:
logger.warning("Auth /me: invalid session: %s", exc)
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=str(exc)) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=str(exc))
user = await session.get(User, user_id) user = await session.get(User, user_id)
if user is None: if user is None:
logger.warning("Auth /me: user not found for id=%s", user_id)
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="user not found") raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="user not found")
logger.info("Auth /me: success for user=%s", user.email)
return { return {
"user": { "user": {
"id": str(user.id), "id": str(user.id),
+5
View File
@@ -1,6 +1,9 @@
import logging
import uuid import uuid
from fastapi import APIRouter, Depends, HTTPException, status from fastapi import APIRouter, Depends, HTTPException, status
logger = logging.getLogger(__name__)
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
@@ -108,8 +111,10 @@ async def update_user_config(
# Merge updates # Merge updates
update_data = data.model_dump(exclude_unset=True, exclude_none=True) update_data = data.model_dump(exclude_unset=True, exclude_none=True)
logger.info("Updating user config for user %s: %s", user_id, update_data)
config.config.update(update_data) config.config.update(update_data)
await session.commit() await session.commit()
await session.refresh(config) await session.refresh(config)
logger.info("Updated config: %s", config.config)
return UserConfigResponse.model_validate(config.config) return UserConfigResponse.model_validate(config.config)
+2
View File
@@ -50,7 +50,9 @@ export const SettingsPage = () => {
git_user_name: config.git_user_name ?? undefined, git_user_name: config.git_user_name ?? undefined,
git_user_email: config.git_user_email ?? undefined, git_user_email: config.git_user_email ?? undefined,
}; };
console.log("Sending update:", update);
const updated = await updateUserConfig(update); const updated = await updateUserConfig(update);
console.log("Received response:", updated);
setConfig(updated); setConfig(updated);
setSaveStatus("saved"); setSaveStatus("saved");