소셜 로그인 한 줄로 붙이기
Google · Naver · GitHub 등 소셜 로그인을 SDK 한 줄로 적용합니다.
이 튜토리얼에서 배울 내용
소셜 로그인 한 줄로 붙이기
Google, Naver 같은 소셜 로그인을 직접 구현하려면 OAuth 프로토콜, 콜백 처리, 토큰 관리 등 복잡한 과정이 필요합니다. ConnectBase를 사용하면 SDK 한 줄로 소셜 로그인을 즉시 적용할 수 있습니다.
완성된 기능
- Google / Naver 소셜 로그인
- 자동 세션 관리 (로그인 상태 유지)
- 사용자 프로필 조회
사전 준비
시작하기 전에 두 가지를 먼저 설정해야 합니다:
1) ConnectBase 콘솔에서 프로바이더 활성화
- ConnectBase 콘솔에 로그인합니다
- 왼쪽 메뉴에서 인증 설정을 클릭합니다
- 소셜 로그인 섹션에서 사용할 프로바이더(Google, Naver 등)의 토글을 ON으로 켭니다
- 각 프로바이더의 Client ID와 Client Secret을 입력합니다
2) 프로바이더별 Client ID 발급
| 프로바이더 | 개발자 콘솔 | 발급 방법 |
|---|---|---|
| console.cloud.google.com | OAuth 2.0 클라이언트 ID 생성 | |
| Naver | developers.naver.com | 애플리케이션 등록 → Client ID 확인 |
📌 콜백 URL은 ConnectBase가 자동으로 처리하므로 별도 설정이 필요 없습니다.
1. 프로젝트 설정
터미널을 열고 아래 명령어를 순서대로 실행합니다. Vite로 React + TypeScript 프로젝트를 만들고, ConnectBase SDK를 설치합니다.
npm create vite@latest login-app -- --template react-ts
cd login-app
npm install connectbase-client설치가 끝나면 .env 파일을 프로젝트 루트에 만들고 Public Key를 입력합니다:
VITE_CONNECT_BASE_PUBLIC_KEY=cb_pk_여기에_퍼블릭키_입력
💡 Public Key는 ConnectBase 콘솔 → 앱 설정 → Public Keys에서 확인할 수 있습니다.
cb_pk_로 시작하는 Public Key를 사용하세요.
2. SDK 설정
프로젝트 어디서든 SDK를 사용할 수 있도록 초기화 파일을 만듭니다.
src/lib/connectbase.ts:
import ConnectBase from 'connectbase-client'
// ConnectBase SDK 인스턴스를 하나만 만들어 전체 앱에서 공유합니다
export const cb = new ConnectBase({
publicKey: import.meta.env.VITE_CONNECT_BASE_PUBLIC_KEY
})3. 로그인 훅 만들기
React에서 로그인 상태를 쉽게 관리하기 위해 커스텀 훅을 만듭니다. 이 훅은 다음을 처리합니다:
- 페이지 로드 시 토큰이 저장돼 있다면
cb.auth.getMe()로 본인 정보 복원 - 로그인 함수 호출 시
cb.oauth.signInWithPopup()팝업 → 토큰 자동 저장 → 본인 정보 조회 - 로그아웃 함수 호출 시
cb.auth.signOut()(refresh token 폐기 + 로컬 토큰 제거)
src/hooks/useAuth.ts:
import { useState, useEffect } from 'react'
import type { MemberInfoResponse } from 'connectbase-client'
import { cb } from '../lib/connectbase'
export function useAuth() {
const [user, setUser] = useState<MemberInfoResponse | null>(null)
const [loading, setLoading] = useState(true)
// 앱이 처음 로드될 때 저장된 토큰으로 본인 정보를 복원합니다
// 토큰이 없거나 만료된 경우 getMe()가 에러를 던지므로 try/catch로 처리
useEffect(() => {
cb.auth
.getMe()
.then((me) => setUser(me))
.catch(() => setUser(null))
.finally(() => setLoading(false))
}, [])
// Google 로그인 — 호출하면 OAuth 팝업이 뜨고 완료 시 토큰이 자동 저장됩니다
const signInWithGoogle = async () => {
await cb.oauth.signInWithPopup('google')
setUser(await cb.auth.getMe())
}
// Naver 로그인
const signInWithNaver = async () => {
await cb.oauth.signInWithPopup('naver')
setUser(await cb.auth.getMe())
}
// 로그아웃
const signOut = async () => {
await cb.auth.signOut()
setUser(null)
}
return { user, loading, signInWithGoogle, signInWithNaver, signOut }
}💡
signInWithPopup은 콜백 URL을 별도로 등록하지 않아도 ConnectBase의 중앙 콜백 페이지를 사용합니다. 리다이렉트 방식을 쓰려면cb.oauth.signIn(provider, callbackUrl)을 호출하고callbackUrl페이지에서cb.oauth.exchangeCodeFromCallback()또는cb.oauth.getCallbackResult()로 결과를 받아오세요.
4. 로그인 페이지 만들기
위에서 만든 useAuth 훅을 사용해 로그인 UI를 만듭니다.
로그인 전에는 소셜 로그인 버튼을, 로그인 후에는 사용자 정보를 보여줍니다.
src/pages/LoginPage.tsx:
import { useAuth } from '../hooks/useAuth'
export function LoginPage() {
const { user, loading, signInWithGoogle, signInWithNaver, signOut } = useAuth()
// 세션 확인 중일 때 로딩 표시
if (loading) return <p>로딩 중...</p>
// 이미 로그인된 상태
// MemberInfoResponse 의 email 은 소셜 로그인 시에만 자동 채워집니다 (없으면 빈 문자열)
if (user) {
return (
<div>
<p>{user.email || user.nickname}님, 환영합니다!</p>
<button onClick={signOut}>로그아웃</button>
</div>
)
}
// 로그인 전 — 소셜 로그인 버튼 표시
return (
<div>
<h1>로그인</h1>
<button onClick={signInWithGoogle}>Google로 계속하기</button>
<button onClick={signInWithNaver}>Naver로 계속하기</button>
</div>
)
}5. 실행하기
npm run dev브라우저에서 http://localhost:5173 을 열면 로그인 페이지가 보입니다.
다음 단계
- GitHub, Kakao, Apple, Discord 로그인 추가 — 콘솔에서 프로바이더 토글만 켜면 됩니다 (지원: google, naver, github, kakao, apple, discord)
- 로그인 후 리다이렉트 — 로그인 성공 시 특정 페이지로 자동 이동
- 사용자 메타데이터 저장 —
cb.auth.updateCustomData({ custom_data: { theme: 'dark' } })로 임의 키-값 저장 (닉네임/이메일은 ConnectBase가 자동 관리) - 접근 권한 제어 — 로그인한 사용자만 특정 페이지에 접근하도록 라우트 가드 설정
이 튜토리얼이 도움이 됐나요?