diff --git a/docs/changelog.md b/docs/changelog.md index f278f91..dbdda33 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -60,3 +60,4 @@ - 카테고리/자산 조회 시 기본 데이터가 비어 있으면 자동 보강되도록 했다. - 기본 카테고리 초기값을 상위 카테고리 `기본 수입`, `기본 지출` 1개씩으로 단순화했다. - 카테고리/자산 추가 바텀 시트의 닫기 버튼을 제거하고 추가 실패 안내를 표시하도록 했다. +- 개발 환경에서만 노출되는 테스트 로그인 버튼과 개발용 로그인 API를 추가했다. diff --git a/pages/login.vue b/pages/login.vue index ae458d5..854380f 100644 --- a/pages/login.vue +++ b/pages/login.vue @@ -51,6 +51,16 @@ {{ pending ? '확인 중...' : mode === 'login' ? '로그인' : '가입하고 시작하기' }} + + @@ -64,6 +74,7 @@ const password = ref('') const error = ref('') const pending = ref(false) const session = useState('session') +const isDev = import.meta.dev async function submit() { pending.value = true @@ -94,6 +105,19 @@ async function submit() { } } +async function devLogin() { + pending.value = true + error.value = '' + try { + session.value = await $fetch('/api/auth/dev-login', { method: 'POST' }) + await navigateTo('/') + } catch { + error.value = '개발용 로그인에 실패했습니다.' + } finally { + pending.value = false + } +} + watch(mode, () => { error.value = '' }) diff --git a/server/api/auth/dev-login.post.ts b/server/api/auth/dev-login.post.ts new file mode 100644 index 0000000..9e76edc --- /dev/null +++ b/server/api/auth/dev-login.post.ts @@ -0,0 +1,26 @@ +import { hash } from 'bcryptjs' +import { createError } from 'h3' +import { prisma } from '../../utils/db' +import { setSession } from '../../utils/auth' +import { ensureDefaultMoneyData } from '../../utils/defaults' + +export default defineEventHandler(async (event) => { + if (process.env.NODE_ENV === 'production') { + throw createError({ statusCode: 404, statusMessage: 'Not found' }) + } + + const email = 'user@example.com' + const user = await prisma.user.upsert({ + where: { email }, + update: {}, + create: { + email, + name: '개발 테스트', + passwordHash: await hash('money1234', 10) + } + }) + + await ensureDefaultMoneyData(prisma, user.id) + setSession(event, user.id) + return { id: user.id, email: user.email, name: user.name } +})