From a02f7df83457c1b7abb1cd93b68d6756e4c60cf8 Mon Sep 17 00:00:00 2001 From: Geovanny Gil Date: Wed, 2 Oct 2024 03:05:27 -0600 Subject: [PATCH] chore(app): add dinamyc routes for env redirection auth --- apps/app/src/app/api/auth/callback/route.ts | 20 ++++++++------------ apps/app/src/lib/url.ts | 11 +++++++++++ 2 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 apps/app/src/lib/url.ts diff --git a/apps/app/src/app/api/auth/callback/route.ts b/apps/app/src/app/api/auth/callback/route.ts index 11ff4ac..47bd882 100644 --- a/apps/app/src/app/api/auth/callback/route.ts +++ b/apps/app/src/app/api/auth/callback/route.ts @@ -1,8 +1,9 @@ +import { getURL } from "@/lib/url"; import { createClient } from "@v1/supabase/server"; import { NextResponse } from "next/server"; export async function GET(request: Request) { - const { searchParams, origin } = new URL(request.url); + const { searchParams } = new URL(request.url); const code = searchParams.get("code"); const next = searchParams.get("next") ?? "/"; @@ -10,18 +11,13 @@ export async function GET(request: Request) { const supabase = createClient(); const { error } = await supabase.auth.exchangeCodeForSession(code); if (!error) { - const forwardedHost = request.headers.get("x-forwarded-host"); - const isLocalEnv = process.env.NODE_ENV === "development"; - - if (isLocalEnv) { - return NextResponse.redirect(`${origin}${next}`); - } - if (forwardedHost) { - return NextResponse.redirect(`https://${forwardedHost}${next}`); - } - return NextResponse.redirect(`${origin}${next}`); + const baseUrl = getURL(); + return NextResponse.redirect( + `${baseUrl}${next.startsWith("/") ? next.slice(1) : next}`, + ); } } - return NextResponse.redirect(`${origin}?error=auth-code-error`); + const baseUrl = getURL(); + return NextResponse.redirect(`${baseUrl}?error=auth-code-error`); } diff --git a/apps/app/src/lib/url.ts b/apps/app/src/lib/url.ts new file mode 100644 index 0000000..9d961ab --- /dev/null +++ b/apps/app/src/lib/url.ts @@ -0,0 +1,11 @@ +export const getURL = () => { + let url = + process?.env?.NEXT_PUBLIC_SITE_URL ?? // Set this to your site URL in production env. + process?.env?.NEXT_PUBLIC_VERCEL_URL ?? // Automatically set by Vercel. + "http://localhost:3000/"; + // Make sure to include `https://` when not localhost. + url = url.startsWith("http") ? url : `https://${url}`; + // Make sure to include a trailing `/`. + url = url.endsWith("/") ? url : `${url}/`; + return url; +};