17. 구현 - JWT
2025. 5. 8. 16:45ㆍ현 프로젝트 시작단계
728x90
앞서 설명 다했다시피
모델
class LoginResult {
final String? jwt;
final String? userId;
final String? springResponse;
final String? errorMessage;
LoginResult({this.jwt, this.userId, this.springResponse, this.errorMessage});
}
✅ 전체 로그인 흐름 요약
1. View (LoginPage)
- 사용자가 이메일, 비밀번호를 입력하고 로그인 버튼을 누름.
- 로그인 버튼 클릭 시 → AuthViewModel.signIn() 호출됨.
- 자동 로그인 체크, 에러 메시지, JWT, Spring 응답 등을 UI에 표시함.
2. ViewModel (AuthViewModel)
- 사용자 입력을 받아 AuthService.signIn() 호출.
- 응답 결과(LoginResult)에서 jwt, userId가 있으면:
- 상태 변수에 저장
- SessionManager().saveSession(jwt, userId)로 세션 저장
- 실패하면 errorMessage에 메시지 설정
- notifyListeners()로 UI 갱신
3. Service (AuthService)
- Supabase SDK 사용해 이메일/비밀번호로 로그인 요청
- 실패 시 에러 메시지 반환
- 로그인 성공하면 Supabase에서 JWT + 유저 ID 추출
- JWT를 Spring 서버로 전송 (_sendJwtToSpring)
- Authorization 헤더에 Bearer 토큰으로 포함
- Spring에서 응답을 받으면 반환
4. Spring 서버 (백엔드)
- /api/user/profile API는 JWT가 유효한지 검증 후 사용자 정보를 반환
- 유효하지 않으면 에러 반환
- 유효하면 사용자 정보 JSON 반환 (예: 이름, 이메일 등)
5. 결과 처리
- ViewModel에서 받은 JWT, 응답 등을 바탕으로
- 화면에 JWT 일부 표시
- Spring 응답을 문자열로 출력 (예: 사용자 이름, 상태 등)
- 오류가 있을 경우 에러 메시지 표시
흐름도
[사용자] → [LoginPage] → [AuthViewModel.signIn()]
↓
[AuthService.signIn(email, pw)]
↓
[Supabase 로그인 → JWT 발급]
↓
[Spring 서버에 JWT 전송 (_sendJwtToSpring)]
↓
[Spring 응답 (성공/실패)] → [LoginResult 반환]
↓
[ViewModel 상태 업데이트 + notifyListeners()]
↓
[UI 반영]
728x90
'현 프로젝트 시작단계' 카테고리의 다른 글
16. 기획 - JWT ( spring/supabase ) (0) | 2025.04.22 |
---|---|
15. RESTful API 테스트 (프론트-플러터 / 백엔드-스프링) (0) | 2025.04.17 |
14. 스프링부트 좋아요 만들기 (0) | 2025.04.10 |
13. 스프링부트 파일 등록하기 (0) | 2025.04.09 |
12. 마리아디비 연결하기 /spring(백엔드) -RES,REQ (2) | 2025.04.07 |