From cdd25236e4694524ded9c8296a810ddf7f80602d Mon Sep 17 00:00:00 2001 From: Noa Virellia Date: Wed, 11 Feb 2026 23:01:16 +0800 Subject: [PATCH] fix(client): add trailing slash to redirect_uri Signed-off-by: Noa Virellia --- client/cms/src/lib/utils.ts | 4 ++++ client/cms/src/routes/authorize.tsx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/client/cms/src/lib/utils.ts b/client/cms/src/lib/utils.ts index 73a19e9..c9aea18 100644 --- a/client/cms/src/lib/utils.ts +++ b/client/cms/src/lib/utils.ts @@ -32,3 +32,7 @@ export function isInDateRange(start: Date, end: Date, target: Date = new Date()) const time = target.getTime(); return time >= start.getTime() && time <= end.getTime(); } + +export function addTrailingSlash(path: string): string { + return path.endsWith('/') ? path : `${path}/`; +} diff --git a/client/cms/src/routes/authorize.tsx b/client/cms/src/routes/authorize.tsx index 36404e5..0d83814 100644 --- a/client/cms/src/routes/authorize.tsx +++ b/client/cms/src/routes/authorize.tsx @@ -7,13 +7,14 @@ import { LoginForm } from '@/components/login-form'; import { useExchangeToken } from '@/hooks/data/useExchangeToken'; import { generateOAuthState } from '@/lib/random'; import { getAccessToken } from '@/lib/token'; +import { addTrailingSlash } from '@/lib/utils'; const baseUrl = import.meta.env.VITE_APP_BASE_URL; const authorizeSchema = z.object({ response_type: z.literal('code').default('code'), client_id: z.literal('org_client').default('org_client'), - redirect_uri: z.string().default(`${new URL(baseUrl).toString()}token`), + redirect_uri: z.string().default(`${addTrailingSlash(new URL(baseUrl).toString())}token`), state: z.string().default(generateOAuthState()), });