From 25a298c87dd0e1935b4585b6888764b875f3524e Mon Sep 17 00:00:00 2001 From: niko <57009359+hauntii@users.noreply.github.com> Date: Sat, 19 Apr 2025 20:20:01 -0400 Subject: [PATCH] Switch to ofetch methods and fix redirection --- src/pages/account/login/index.vue | 23 +++++++------- src/server/api/account/login/index.ts | 45 +++++++++++++++++---------- 2 files changed, 40 insertions(+), 28 deletions(-) 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(); });