diff --git a/src/pages/account/login/index.vue b/src/pages/account/login/index.vue index 2fa873e..ccde674 100644 --- a/src/pages/account/login/index.vue +++ b/src/pages/account/login/index.vue @@ -1,4 +1,6 @@ diff --git a/src/server/api/account/login/index.ts b/src/server/api/account/login/index.ts index d13e0c4..440a01c 100644 --- a/src/server/api/account/login/index.ts +++ b/src/server/api/account/login/index.ts @@ -1,25 +1,36 @@ +import { FetchError } from 'ofetch'; + +type LoginCCResponse = { + refresh_token: string; + access_token: string; + token_type: string; + expires_in: number; +}; + export default defineEventHandler(async (event) => { const body = await readBody(event); - const apiResponse = await fetch(`${useRuntimeConfig(event).apiBase}/v1/login`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ ...body, grant_type: 'password' }) - }); - const apiJSON = await apiResponse.json(); - if (!apiResponse.ok) { - setResponseStatus(event, apiResponse.status, apiJSON.error); + try { + const apiResponse = await $fetch(`${useRuntimeConfig(event).apiBase}/v1/login`, { + method: 'POST', + body: { ...body, grant_type: 'password' } + }); + + setCookie(event, 'refresh_token', apiResponse.refresh_token); + setCookie(event, 'access_token', apiResponse.access_token); + setCookie(event, 'token_type', apiResponse.token_type); + + setResponseStatus(event, 200); + event.node.res.end(); + } catch (error: unknown) { + if (error instanceof FetchError) { + setResponseStatus(event, error.status, error.data.error); + } else { + setResponseStatus(event, 500); + } + event.node.res.end(); return; } - - setCookie(event, 'refresh_token', apiJSON.refresh_token); - setCookie(event, 'access_token', apiJSON.access_token); - setCookie(event, 'token_type', apiJSON.token_type); - - setResponseStatus(event, 200); - event.node.res.end(); });