forked from baron/baron-sso
46 lines
2.2 KiB
Markdown
46 lines
2.2 KiB
Markdown
# Issue #434 트러블슈팅 기록: 대시보드 세션 시작 시간이 `Unknown`으로 표시됨
|
|
|
|
## 기준 시점
|
|
- 2026-03-24 KST
|
|
- 대상 화면: UserFront 대시보드 상단 세션 정보 칩
|
|
|
|
## 증상
|
|
- 로그인 후 대시보드의 세션 시작 시간이 `Unknown` 또는 `알 수 없음`으로 표시됨
|
|
- 특히 동일 브라우저의 cookie session 승격 경로에서 재현됨
|
|
|
|
## 원인
|
|
1. 기존 대시보드는 저장된 로컬 토큰만 파싱해 `iat` 또는 `auth_time`을 읽었습니다.
|
|
2. cookie mode에서는 `AuthTokenStore.setCookieMode()`가 로컬 토큰을 제거하고 cookie 플래그만 유지합니다.
|
|
3. 그 결과 대시보드는 파싱할 JWT가 없어 항상 fallback 문구로 떨어졌습니다.
|
|
|
|
## 수정 방향
|
|
1. Backend `/api/v1/user/me` 응답에 Kratos `sessions/whoami`의 `authenticated_at` 값을 `sessionAuthenticatedAt`으로 포함합니다.
|
|
2. UserFront 대시보드는 세션 시각 계산 시 다음 우선순위를 사용합니다.
|
|
- JWT의 `iat` 또는 `auth_time`
|
|
- profile의 `sessionAuthenticatedAt`
|
|
3. 두 값이 모두 없을 때만 `ui.userfront.session.unknown` fallback을 사용합니다.
|
|
|
|
## 반영 파일
|
|
- `backend/internal/domain/auth_models.go`
|
|
- `backend/internal/handler/auth_handler.go`
|
|
- `backend/docs/openapi.yaml`
|
|
- `userfront/lib/features/profile/data/models/user_profile_model.dart`
|
|
- `userfront/lib/features/dashboard/domain/session_time_resolver.dart`
|
|
- `userfront/lib/features/dashboard/presentation/dashboard_screen.dart`
|
|
|
|
## 회귀 테스트
|
|
- Backend
|
|
- `backend/internal/handler/auth_handler_session_profile_test.go`
|
|
- UserFront
|
|
- `userfront/test/dashboard_session_time_resolver_test.dart`
|
|
- `userfront/test/dashboard_screen_smoke_test.dart`
|
|
|
|
## 검증 명령
|
|
- `GOCACHE=/tmp/go-build go test ./internal/handler -run 'TestGetMe_IncludesSessionAuthenticatedAt' -count=1`
|
|
- `flutter test test/dashboard_session_time_resolver_test.dart`
|
|
- `flutter test test/dashboard_screen_smoke_test.dart`
|
|
|
|
## 남은 참고사항
|
|
- Hydra introspection fallback만 사용되는 토큰 경로에서는 `sessionAuthenticatedAt`이 비어 있을 수 있습니다.
|
|
- 이 경우에도 JWT claim이 없으면 기존 fallback 문구를 유지합니다.
|