Skip to content

[FE-66 -> develop] feat: Google OAuth 로그인 추가 - #30

Merged
devlasbe merged 1 commit into
developfrom
FE-66
Jul 14, 2026
Merged

devlasbe merged 1 commit into
developfrom
FE-66

Conversation

@devlasbe

Copy link
Copy Markdown

요약

CodePush 웹/서버에 Google OAuth 로그인을 추가한다. 허용 이메일 도메인(yplabs.kr) 화이트리스트 게이트, 같은 이메일 기존 계정 자동 연결.

  • PRD: 없음
  • Figma: 없음

배경

  • 로그인 수단이 GitHub OAuth(org 멤버 게이트)뿐이라 Google Workspace(yplabs.kr) 계정으로 로그인할 수 없었다.
  • Google은 org 멤버십 대응물이 없어 허용 이메일 도메인 화이트리스트(GOOGLE_ALLOWED_DOMAIN)를 게이트로 사용한다.

변경 사항

  • routes/auth.ts — Google OAuth 라우트 2개 신설

    • Before: /auth/login(GitHub)만 존재
    • After: GET /auth/google/login(인증 화면 리다이렉트) + GET /auth/google/callback(code→토큰→userinfo→게이트→세션)
    • 세부:
      • 도메인 게이트: 이메일 도메인이 GOOGLE_ALLOWED_DOMAIN(콤마 구분)에 없으면 google_domain_not_allowed 거부. 미설정 시 전부 거부 (안전 기본값)
      • 계정: 같은 이메일 존재 시 googleId만 연결, 없으면 신규 생성(ENABLE_ACCOUNT_REGISTRATION 준수)
      • 세션 발급·웹/CLI 분기·에러 리다이렉트는 GitHub 콜백과 동일 패턴 (기존 GitHub 경로는 무변경)
  • middleware/auth.ts — Google API 헬퍼

    • getGoogleAccessToken(토큰 교환) / getGoogleUser(userinfo)
    • ID 토큰 파싱 대신 userinfo 엔드포인트 사용 (Workers에 Buffer 없음, TLS 직수신이라 서명 검증 불필요)
    • email_verified: false 거부 — 게이트가 이메일 기반이므로
  • DB — account.google_id 컬럼 (마이그레이션 0004_add_google_id.sql)

    • d1.ts: 계정 매핑 3곳 중복을 mapAccountFromDB로 통합하며 googleId 반영, linkedProviders를 GitHub/Google 조합으로 계산
  • 웹 LoginPage.tsx / config.ts — Continue with Google 버튼(G 로고 SVG, outline) + google_domain_not_allowed 에러 메시지, GitHub 버튼 primary(파랑) → 검정 통일

  • 설정 — env.ts에 GOOGLE_* 3종(전부 optional, 기존 배포 env 무영향), wrangler.toml local/production에 CLIENT_ID·ALLOWED_DOMAIN, vitest 바인딩에 테스트값 고정(실채널 발신 차단 규칙)

테스트

  • 신규 테스트 4종(fetchMock, 외부 발신 없음): 로그인 리다이렉트 / 허용 도메인 통과+세션 / 비허용 도메인 거부+세션 미발급 / 기존 계정 연결(계정 수 불변 + googleId 연결 DB 검증)
  • 로컬 실 E2E: 실제 Google 클라이언트로 yplabs.kr 계정 로그인 → 대시보드 진입 확인
  • tsc / biome ci / vitest 127/127 (server), tsc / build (web)
  • 기존 GitHub 로그인 무변경 (운영 라우트 302 확인)

참고

  • 배포 사전작업 완료됨: 운영 D1에 google_id 마이그레이션 적용 + GOOGLE_CLIENT_SECRET 시크릿 등록 + Google Console 리디렉션 URI(로컬/실서버) 등록 — 머지 후 main 배포만 하면 동작
  • 배포 순서: 서버(main 머지 자동) → 웹 수동 배포 (버튼이 먼저 나가면 라우트 없음)
  • 시크릿은 .dev.vars(git-ignored)와 wrangler secret에만 존재, 커밋에 없음

🤖 Generated with Claude Code

- /auth/google/login, /auth/google/callback (허용 도메인 화이트리스트 게이트)
- account.google_id 컬럼 마이그레이션 + linkedProviders GitHub/Google 조합
- getGoogleAccessToken/getGoogleUser 헬퍼 (userinfo 엔드포인트, 미검증 이메일 거부)
- 웹 Continue with Google 버튼 + google_domain_not_allowed 에러, GitHub 버튼 검정 통일
- 테스트 4종: 로그인 리다이렉트/도메인 허용·거부/기존 계정 연결

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@devlasbe
devlasbe merged commit 0e09057 into develop Jul 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant