bookquote

화면 설계 — 로그인 /auth/login (이미 구현 — 역정리 + 개선 권고)

그룹 3. 입력 근거: lib/features/auth/login_screen.dart, lib/features/auth/auth_controller.dart(코드 기준), DECISIONS 2026-05-10(카카오 OAuth V1.5). 게스트 라우트.

1. 목적 / 진입·이탈 / 라우트

2. 와이어프레임

[ 입력 화면 ]                          [ _SentNotice (전송 후) ]
┌─────────────────────────┐            ┌─────────────────────────┐
│  책귀                    │            │  ✉ 메일을 보냈어요        │
│  좋은 구절을 모으세요     │            │  sttgpark@gmail.com 로    │
│  ┌─────────────────────┐ │            │  로그인 링크를 보냈어요.  │
│  │ 이메일               │ │            │  메일함을 확인해주세요.   │
│  └─────────────────────┘ │            │                          │
│  ┌─────────────────────┐ │            │  (권고 추가:)             │
│  │   로그인 링크 받기   │ │            │  · "메일이 안 와요?" 안내 │
│  └─────────────────────┘ │            │  · [다른 이메일로 다시]   │
│  ─────────────────────── │            └─────────────────────────┘
│  ⊗ 카카오로 시작 (곧)    │ ← 비활성 placeholder (DECISIONS 2026-05-10)
└─────────────────────────┘

3. 상태 (코드 기준)

| 상태 | 처리 | 심각도 | |—|—|—| | 입력 | _emailController + _formKey. validator: 빈값 “이메일을 입력해주세요.” / !contains('@') || !contains('.') “올바른 이메일 주소를 입력해주세요.” (느슨) | — | | 전송 중 | authControllerProvider(AsyncNotifierProvider<AuthController, void>).isLoading → 버튼 비활성. sendMagicLinkisSupabaseReady 아니면 AuthException('Supabase 환경 미설정') throw, 아니면 AsyncValue.guard(supabase.auth.signInWithOtp(email, emailRedirectTo: _redirectUrl(), shouldCreateUser: true)) | 낮음 | | 전송 성공 | state.when(data:)_linkSent = true_SentNotice | — | | 전송 실패 | state.when(error:)ScaffoldMessenger.showSnackBar(authErrorMessage(e)). authErrorMessage: rate limit → “메일을 너무 자주 요청했어요…” / invalid email → “올바른 이메일 주소…” / kDebugMode면 raw / 그 외 “문제가 발생했어요…” | 중간 | | _redirectUrl() | kIsWeb'${Uri.base.origin}/auth/callback', 아니면 'io.github.tgparkk.bookquote://auth/callback' | — | | 카카오 버튼 | OutlinedButton.icon(onPressed: null, ...) — 비활성. AuthController.signInWithKakao는 존재하나 호출처 없음(DECISIONS — KOE205) | — |

4. 인터랙션

5. 토큰 매핑

6. 재사용 / 신규

7. 엣지 / 접근성 + 수정·보강 항목

교차 관심사: ⑦ 게스트 라우트 · ② ?from= 보존(아래 ③) · ③ PII = kDebugMode에서만 raw error 노출(준수) · ⑥ 에러 = Toast(일관). 양호(유지): 카카오 비활성 placeholder(코드 주석에 KOE205 사유·우회책 기록됨) · 에러 Toast 분기 · shouldCreateUser: true 가입 통합. 수정·보강 권고 (현행 ≠ 권고):

변경 이력