728x90
반응형
- 서버 액션 (Server Actions)
- requestLoginUrl(provider: string)
- 사용자가 로그인 요청을 하면, 해당 SNS 제공자의 로그인 URL을 가져옴.
- provider 값을 API에 맞게 변환한 후 사용.
- 모바일 여부를 확인해 platform을 설정 (PC/Mobile).
- redirectUri를 설정한 뒤 SNS 로그인 URL 요청.
- 최종적으로 SNS 로그인 URL 반환.
- openIdLoginProcess(provider: string, code: string, state: string | null)
- SNS 로그인 후 리디렉션된 사용자의 로그인 데이터를 API에 전달.
- 받은 인증 코드(code)와 상태 값(state)을 포함해 API 요청.
- 인증 성공 시 accessToken 반환.
- requestLoginUrl(provider: string)
- 클라이언트 측 콜백 페이지 (AuthCallbackPage)
- 사용자가 SNS 로그인을 완료한 후 해당 페이지로 리디렉션됨.
- URL에서 code, state, error를 추출.
- openIdLoginProcess를 실행하여 서버에 로그인 요청.
- 로그인 성공 시 accessToken을 저장하고, 필요에 따라 회원가입 페이지로 이동.
- useEffect를 통해 params.provider 값이 있을 경우 로그인 처리 실행.
- SNS 로그인 후 받은 code와 state 값을 가져옴.
- 사용자가 로그인을 취소했을 경우 로그인 페이지로 이동.
- openIdLoginProcess 실행 후 결과 처리:
- accessToken이 있으면 토큰을 저장하고 홈페이지(/)로 이동.
- 추가 회원가입이 필요하면 회원가입 완료 페이지(/signup/complete)로 이동.
- SNS별 로그인 처리 (각 /route.ts 파일)
- 공통 흐름:
- SNS 인증 코드(code)를 사용하여 해당 SNS에서 액세스 토큰 요청.
- 액세스 토큰을 사용해 사용자 정보를 조회.
- 서버 API(/api/member/auth/login/sns)로 로그인 요청.
- 로그인 성공 시 accessToken을 쿠키에 저장하고 리디렉션.
- 기존 회원이 아니라면 joinAction을 실행하여 회원가입 후 로그인 처리.
- Apple 로그인 (apple/route.ts)
- JWT를 생성하여 Apple 서버에 인증 요청.
- id_token을 디코딩하여 사용자 정보 추출.
- 기존 회원이면 로그인, 신규 회원이면 회원가입 후 로그인 처리.
- Kakao 로그인 (kakao/route.ts)
- kauth.kakao.com/oauth/token API를 호출해 액세스 토큰 획득.
- kapi.kakao.com/v2/user/me API로 사용자 정보 조회.
- 기존 회원이면 로그인, 신규 회원이면 회원가입 후 로그인 처리.
- Naver 로그인 (naver/route.ts)
- nid.naver.com/oauth2.0/token API를 호출해 액세스 토큰 획득.
- openapi.naver.com/v1/nid/me API로 사용자 정보 조회.
- 기존 회원이면 로그인, 신규 회원이면 회원가입 후 로그인 처리.
- 공통 흐름:
- 정리
- requestLoginUrl: SNS 로그인 URL 요청.
- openIdLoginProcess: SNS 로그인 후 액세스 토큰 받아오기.
- AuthCallbackPage: 로그인 완료 후 처리 (홈 이동 또는 회원가입).
- /route.ts 파일들: SNS별 로그인 API 처리
소셜 로그인 프로바이더 별 처리
1️⃣ 애플 로그인 처리 (apple/route.ts)
애플 OAuth 토큰을 jwt.sign()을 통해 생성하여 서버에 전송 후 로그인 처리
2️⃣ 카카오 로그인 처리 (kakao/route.ts)
- 카카오 인증 서버(https://kauth.kakao.com/oauth/token)에 code를 보내 access_token을 받음
- 받은 액세스 토큰을 이용해 https://kapi.kakao.com/v2/user/me에서 사용자 정보를 가져옴
- 회원 가입 여부 확인
- 이미 가입한 사용자라면 토큰을 저장하고 /로 이동
- 신규 사용자라면 /signup/complete?name=...&email=...로 이동하여 추가 정보 입력
3️⃣ 네이버 로그인 처리 (naver/route.ts)
- 네이버 인증 서버(https://nid.naver.com/oauth2.0/token)에 code를 보내 access_token을 받음
- 받은 액세스 토큰을 이용해 https://openapi.naver.com/v1/nid/me에서 사용자 정보를 가져옴
- 회원 가입 여부 확인
- 가입한 사용자라면 토큰 저장 후 /로 이동
- 신규 사용자라면 /signup/complete?name=...로 이동하여 추가 정보 입력
📌 최종 흐름 정리
mermaid
코드 복사
sequenceDiagram participant User as 사용자 participant Browser as 브라우저 participant SocialLogin as 네이버/카카오/애플 participant Server as 서버 (Next.js API) User ->> Browser: 소셜 로그인 버튼 클릭 Browser ->> SocialLogin: OAuth 인증 요청 SocialLogin ->> Browser: 로그인 완료 후 redirect Browser ->> Server: /auth/callback?code=... Server ->> SocialLogin: 액세스 토큰 요청 SocialLogin ->> Server: 액세스 토큰 반환 Server ->> SocialLogin: 사용자 정보 요청 SocialLogin ->> Server: 사용자 정보 반환 Server ->> Browser: JWT 토큰 저장 & 로그인 완료 Browser ->> User: 홈 화면으로 이동
📌 결론
✔️ OAuth 로그인 콜백을 처리하여 토큰을 발급받고 로그인 상태를 유지
✔️ 사용자 인증이 완료되면 액세스 토큰을 쿠키에 저장
✔️ 최초 로그인 시 추가 정보 입력을 위해 /signup/complete으로 이동
✔️ 로그인 실패 시 /login으로 이동
728x90
반응형
'DEV' 카테고리의 다른 글
[AWS] 오토 스케일링 그룹상태값 Auto Scaling Group (0) | 2024.11.19 |
---|---|
하트 날리기 : 클릭 할때 마다 하트날리기 (6) | 2024.11.04 |
생성형 AI의 모든 것 (4) | 2024.11.03 |
React : JSX (2) | 2024.10.28 |
싱글 페이지 애플리케이션(SPA)에서 성능 최적화: 지연 로딩(Lazy Loading) 활용하기 (1) | 2024.10.24 |