59 lines
2.0 KiB
Markdown
59 lines
2.0 KiB
Markdown
# baron-sso 로그인 흐름
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph Backend[backend]
|
|
B1[main.go 실행]
|
|
B2[.env 로드]
|
|
B3[Logger / DB / IDP 초기화]
|
|
B4[/api/v1/auth 라우트 등록]
|
|
B5[AuthHandler.PasswordLogin]
|
|
B6[AuthHandler.PhoneLogin]
|
|
B7[토큰 및 redirectTo 응답]
|
|
B8[/api/v1/user/me]
|
|
B1 --> B2 --> B3 --> B4
|
|
B5 --> B7
|
|
B6 --> B7
|
|
end
|
|
|
|
subgraph Userfront[userfront]
|
|
U1[main.dart 실행]
|
|
U2[GoRouter 설정]
|
|
U3[/ko/signin 또는 /ko/connect]
|
|
U4[LoginScreen 표시]
|
|
U5[_handlePasswordLogin]
|
|
U6[_handlePhoneOnlyLogin]
|
|
U7[AuthProxyService 호출]
|
|
U8[_onLoginSuccess]
|
|
U9[AuthTokenStore.setToken]
|
|
U10[redirectTo 이동 또는 dashboard 이동]
|
|
U1 --> U2 --> U3 --> U4
|
|
U5 --> U7 --> U8 --> U9 --> U10
|
|
U6 --> U7
|
|
end
|
|
|
|
U4 --> U5
|
|
U4 --> U6
|
|
U7 --> B5
|
|
U7 --> B6
|
|
B7 --> U8
|
|
U10 --> B8
|
|
```
|
|
|
|
## 흐름 요약
|
|
|
|
1. `backend/cmd/server/main.go`가 먼저 실행되어 라우트를 엽니다.
|
|
2. `userfront/lib/main.dart`가 실행되어 `/ko/signin`, `/ko/connect`를 `LoginScreen`으로 연결합니다.
|
|
3. 사용자가 로그인하면 `login_screen.dart`의 `_handlePasswordLogin()` 또는 `_handlePhoneOnlyLogin()`이 실행됩니다.
|
|
4. `AuthProxyService`가 백엔드 인증 API를 호출합니다.
|
|
5. 백엔드가 성공 응답을 주면 `AuthTokenStore`에 토큰을 저장합니다.
|
|
6. `redirectTo`가 있으면 그쪽으로 이동하고, 없으면 `dashboard`로 이동합니다.
|
|
|
|
## 참고 파일
|
|
|
|
* [backend/cmd/server/main.go](/home/ryu/baron-sso/backend/cmd/server/main.go)
|
|
* [userfront/lib/main.dart](/home/ryu/baron-sso/userfront/lib/main.dart)
|
|
* [userfront/lib/features/auth/presentation/login_screen.dart](/home/ryu/baron-sso/userfront/lib/features/auth/presentation/login_screen.dart)
|
|
* [userfront/lib/core/services/auth_proxy_service.dart](/home/ryu/baron-sso/userfront/lib/core/services/auth_proxy_service.dart)
|
|
* [backend/internal/handler/auth_handler.go](/home/ryu/baron-sso/backend/internal/handler/auth_handler.go)
|