Browse Source

fix(auth): unify login/register error copy without duplicate toast

Made-with: Cursor
main
npmrun 14 hours ago
parent
commit
31599d0ec1
  1. 18
      app/pages/login/index.vue
  2. 18
      app/pages/register/index.vue

18
app/pages/login/index.vue

@ -1,6 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import type { FormError, FormSubmitEvent } from '@nuxt/ui' import type { FormError, FormSubmitEvent } from '@nuxt/ui'
import { request, unwrapApiBody, type ApiResponse } from '../../utils/http/factory'
import { DEFAULT_AUTHENTICATED_LANDING_PATH, normalizeSafeRedirect } from '../../utils/auth-routes' import { DEFAULT_AUTHENTICATED_LANDING_PATH, normalizeSafeRedirect } from '../../utils/auth-routes'
import { useAuthSession } from '../../composables/useAuthSession' import { useAuthSession } from '../../composables/useAuthSession'
@ -34,6 +33,7 @@ const resultMessage = ref('')
const route = useRoute() const route = useRoute()
const { refresh } = useAuthSession() const { refresh } = useAuthSession()
const { allowRegister } = useGlobalConfig() const { allowRegister } = useGlobalConfig()
const { fetchData, getApiErrorMessage } = useClientApi()
const validate = (formState: LoginFormState): FormError[] => { const validate = (formState: LoginFormState): FormError[] => {
const errors: FormError[] = [] const errors: FormError[] = []
@ -59,13 +59,11 @@ const onSubmit = async (_event: FormSubmitEvent<LoginFormState>) => {
loading.value = true loading.value = true
try { try {
const res = unwrapApiBody(await request<ApiResponse<LoginResult>>('/api/auth/login', { const res = await fetchData<LoginResult>('/api/auth/login', {
method: 'POST', method: 'POST',
body: { body: { username: state.username, password: state.password },
username: state.username, notify: false,
password: state.password, })
},
}))
await refresh(true) await refresh(true)
@ -77,12 +75,8 @@ const onSubmit = async (_event: FormSubmitEvent<LoginFormState>) => {
const redirectTarget = normalizeSafeRedirect(redirectCandidate, DEFAULT_AUTHENTICATED_LANDING_PATH) const redirectTarget = normalizeSafeRedirect(redirectCandidate, DEFAULT_AUTHENTICATED_LANDING_PATH)
await navigateTo(redirectTarget) await navigateTo(redirectTarget)
} catch (error: unknown) { } catch (error: unknown) {
const message = typeof error === 'object' && error !== null && 'statusMessage' in error
? String(error.statusMessage)
: '登录失败,请稍后重试'
resultType.value = 'error' resultType.value = 'error'
resultMessage.value = message resultMessage.value = getApiErrorMessage(error)
} finally { } finally {
loading.value = false loading.value = false
} }

18
app/pages/register/index.vue

@ -1,6 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import type { FormError, FormSubmitEvent } from '@nuxt/ui' import type { FormError, FormSubmitEvent } from '@nuxt/ui'
import { request, unwrapApiBody } from '../../utils/http/factory'
import { normalizeSafeRedirect } from '../../utils/auth-routes' import { normalizeSafeRedirect } from '../../utils/auth-routes'
definePageMeta({ definePageMeta({
@ -33,6 +32,7 @@ const loading = ref(false)
const resultType = ref<'error' | ''>('') const resultType = ref<'error' | ''>('')
const resultMessage = ref('') const resultMessage = ref('')
const route = useRoute() const route = useRoute()
const { fetchData, getApiErrorMessage } = useClientApi()
const validate = (formState: RegisterFormState): FormError[] => { const validate = (formState: RegisterFormState): FormError[] => {
const errors: FormError[] = [] const errors: FormError[] = []
@ -58,13 +58,11 @@ const onSubmit = async (_event: FormSubmitEvent<RegisterFormState>) => {
loading.value = true loading.value = true
try { try {
unwrapApiBody(await request('/api/auth/register', { await fetchData<unknown>('/api/auth/register', {
method: 'POST', method: 'POST',
body: { body: { username: state.username, password: state.password },
username: state.username, notify: false,
password: state.password, })
},
}))
const redirectCandidate = Array.isArray(route.query.redirect) const redirectCandidate = Array.isArray(route.query.redirect)
? route.query.redirect[0] ? route.query.redirect[0]
@ -75,12 +73,8 @@ const onSubmit = async (_event: FormSubmitEvent<RegisterFormState>) => {
query: { redirect }, query: { redirect },
}) })
} catch (error: unknown) { } catch (error: unknown) {
const message = typeof error === 'object' && error !== null && 'statusMessage' in error
? String(error.statusMessage)
: '注册失败,请稍后重试'
resultType.value = 'error' resultType.value = 'error'
resultMessage.value = message resultMessage.value = getApiErrorMessage(error)
} finally { } finally {
loading.value = false loading.value = false
} }

Loading…
Cancel
Save