[기능] 소셜로그인 구현 플로우 및 역할(RN + NestJS + MongoDB)
01. 개발 진행중인 앱 스택
- 클라이언트: React Native
- 백엔드: Nest.js + MongoDB
02. 로그인 플로우
1. 앱에서 Google/Kakao OAuth => id_token(구글) or access_token(카카오) 획득
2. 앱이 이 토큰을 NestJS 서버로 전송
3. 서버에서 공식 방식으로 검증
- Google: id_token 서명 검증 + aud/iss 체크
- Kakao: access_token으로 /v2/user/me 호출
4. DB에서 사용자 조회, 없으면 upsert (새로 만든다는 뜻)
5. 서버에서 JWT 발급 (짧은 access token + 긴 refrest token)
6. 앱은 access token을 써서 API 호출
03. FE, BE 역할
1. FE
1)expo-auth-session으로google/kakao 로그인 화면띄움
2) 로그인 성공시,
- 구글:id_token획득
- 카카오:access_token획득
3) 획득한 토큰을 NestJS 서버로 전달 (ex: /auth/google, /auth/kakao)
2. BE
1) 전달받은 토큰 검증
- 구글:id_token=>OAuth2Client로 서명 + aud/iss 검증
- 카카오:access_token=> Kakao API/v2/user/me호출로 사용자 ID 확인
2) DB 작업
- 해당 provider + providerId 로 사용자 조회
- 없으면, 신규 생성 (upsert)
3) JWT 발급
- 짧은 수명 access token + 긴 수명 refresh token
- 앱은 이후 API 호출할 때 access token 사용