fix: 미인증 로그인 시 에러 토스트 없이 발송 완료 화면으로 전환
로그인 호출에 silent 옵션을 추가해 전역 에러 토스트를 끄고, 로그인 화면에서 에러를 직접 처리. 미인증(403)은 토스트 없이 인증 메일 발송 후 발송 완료 화면으로 이동하고, 그 외 자격 오류만 다이얼로그로 안내. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,10 +4,12 @@ import { computed, ref } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import RelayMark from '@/components/RelayMark.vue'
|
||||
import { useAuthStore } from '@/stores/auth.store'
|
||||
import { useDialog } from '@/composables/useDialog'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const authStore = useAuthStore()
|
||||
const dialog = useDialog()
|
||||
|
||||
// 폼 상태
|
||||
const email = ref('')
|
||||
@@ -35,25 +37,36 @@ async function onLogin() {
|
||||
if (submitting.value) return
|
||||
submitting.value = true
|
||||
try {
|
||||
await authStore.login({
|
||||
email: email.value.trim(),
|
||||
password: password.value,
|
||||
keepLogin: keepLogin.value,
|
||||
})
|
||||
// silent: 미인증(403)은 토스트 없이 화면 전환으로 처리하므로 전역 에러 알림을 끈다
|
||||
await authStore.login(
|
||||
{
|
||||
email: email.value.trim(),
|
||||
password: password.value,
|
||||
keepLogin: keepLogin.value,
|
||||
},
|
||||
{ silent: true },
|
||||
)
|
||||
await router.push('/projects')
|
||||
} catch (err) {
|
||||
// 미인증 계정(서버 403) → 인증 메일을 즉시 발송하고 '발송 완료' 화면으로 이동
|
||||
const status = (err as { response?: { status?: number } })?.response?.status
|
||||
if (status === 403) {
|
||||
const res = (
|
||||
err as { response?: { status?: number; data?: { error?: { message?: string } } } }
|
||||
)?.response
|
||||
// 미인증 계정(서버 403) → 인증 메일을 즉시 발송하고 '발송 완료' 화면으로 조용히 이동
|
||||
if (res?.status === 403) {
|
||||
const addr = email.value.trim()
|
||||
try {
|
||||
await authStore.resendVerification(addr)
|
||||
} catch {
|
||||
// 재발송 실패는 API 인터셉터가 전역 처리
|
||||
// 재발송 실패는 무시(화면 전환 우선)
|
||||
}
|
||||
await router.push({ path: '/signup', query: { sent: addr } })
|
||||
return
|
||||
}
|
||||
// 그 외(자격 불일치 등) 에러 메시지는 API 인터셉터에서 전역 처리됨
|
||||
// 그 외(자격 불일치 등) — 서버 메시지를 직접 안내
|
||||
void dialog.alert(
|
||||
res?.data?.error?.message ?? '이메일 또는 비밀번호가 올바르지 않습니다.',
|
||||
{ variant: 'danger' },
|
||||
)
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user