Add development test login
This commit is contained in:
@@ -60,3 +60,4 @@
|
||||
- 카테고리/자산 조회 시 기본 데이터가 비어 있으면 자동 보강되도록 했다.
|
||||
- 기본 카테고리 초기값을 상위 카테고리 `기본 수입`, `기본 지출` 1개씩으로 단순화했다.
|
||||
- 카테고리/자산 추가 바텀 시트의 닫기 버튼을 제거하고 추가 실패 안내를 표시하도록 했다.
|
||||
- 개발 환경에서만 노출되는 테스트 로그인 버튼과 개발용 로그인 API를 추가했다.
|
||||
|
||||
@@ -51,6 +51,16 @@
|
||||
{{ pending ? '확인 중...' : mode === 'login' ? '로그인' : '가입하고 시작하기' }}
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<button
|
||||
v-if="isDev"
|
||||
type="button"
|
||||
class="btn-secondary mt-3 w-full border-dashed text-muted"
|
||||
:disabled="pending"
|
||||
@click="devLogin"
|
||||
>
|
||||
개발용 테스트 로그인
|
||||
</button>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
@@ -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 = ''
|
||||
})
|
||||
|
||||
26
server/api/auth/dev-login.post.ts
Normal file
26
server/api/auth/dev-login.post.ts
Normal file
@@ -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 }
|
||||
})
|
||||
Reference in New Issue
Block a user