feat: 구글 로그인 전용 — 아이디 로그인 폼·회원가입 UI 숨김
CI / build (push) Failing after 14m50s

- src/config/features.js ID_LOGIN_ENABLED 플래그(기본 false)로 게이트
- LoginModal: 아이디/비번 폼·'또는' 구분선·회원가입 링크 숨김(구글 버튼만)
- HomeView: 랜딩 회원가입 버튼 숨김, 안내문구 정리
- 백엔드 /api/auth/login·signup 은 비상용으로 유지(플래그 true 로 복구 가능)
- LoginModal.spec: 아이디 로그인 플로우는 플래그 mock 으로 계속 검증

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ByungCheol
2026-06-27 19:41:04 +09:00
parent b8c1440e4d
commit 8254460751
4 changed files with 16 additions and 5 deletions
+4
View File
@@ -6,10 +6,14 @@ import { setActivePinia, createPinia } from 'pinia'
const { pushMock } = vi.hoisted(() => ({ pushMock: vi.fn() }))
vi.mock('vue-router', () => ({ useRouter: () => ({ push: pushMock }) }))
// 아이디 로그인 플로우 검증용 — 운영에선 숨김(ID_LOGIN_ENABLED=false)이지만 로직은 유지되므로 켜서 테스트
vi.mock('@/config/features', () => ({ ID_LOGIN_ENABLED: true }))
vi.mock('@/api/authApi', () => ({
authApi: {
login: vi.fn(),
signupEnabled: vi.fn(() => Promise.resolve({ enabled: true })),
googleClientId: vi.fn(() => Promise.resolve({ clientId: '' })),
},
}))
+4 -3
View File
@@ -5,6 +5,7 @@ import { useAuthStore } from '@/stores/auth'
import { useUiStore } from '@/stores/ui'
import { authApi } from '@/api/authApi'
import { isNativeGoogle, nativeGoogleIdToken } from '@/native/googleAuth'
import { ID_LOGIN_ENABLED } from '@/config/features'
const auth = useAuthStore()
const ui = useUiStore()
@@ -173,7 +174,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKeydown))
<button class="close" type="button" aria-label="닫기" @click="ui.closeLogin()">×</button>
<h2>로그인</h2>
<form class="form" @submit.prevent="handleLogin">
<form v-if="ID_LOGIN_ENABLED" class="form" @submit.prevent="handleLogin">
<input v-model="form.loginId" type="text" placeholder="아이디" autocomplete="username" :disabled="loading" />
<input v-model="form.password" type="password" placeholder="비밀번호" autocomplete="current-password" :disabled="loading" />
<label class="remember">
@@ -187,7 +188,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKeydown))
<!-- 구글 로그인 서버에 클라이언트 ID 설정된 경우에만 노출 -->
<div v-show="googleClientId" class="google-wrap">
<div class="divider"><span>또는</span></div>
<div v-if="ID_LOGIN_ENABLED" class="divider"><span>또는</span></div>
<!-- (안드로이드): 네이티브 버튼 / ·PC: GIS 렌더 버튼 -->
<button
v-if="isNative"
@@ -211,7 +212,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKeydown))
네이버로 로그인 (준비 )
</button>
<p class="links">
<p v-if="ID_LOGIN_ENABLED" class="links">
<template v-if="ui.signupEnabled">
계정이 없으신가요?
<a href="#" @click.prevent="goSignup">회원가입</a>