diff --git a/src/routes/(auth)/auth/callback/+server.ts b/src/routes/(auth)/auth/callback/+server.ts index 1202d799..b6a59e54 100644 --- a/src/routes/(auth)/auth/callback/+server.ts +++ b/src/routes/(auth)/auth/callback/+server.ts @@ -6,30 +6,44 @@ export const GET: RequestHandler = async ({ url, locals: { supabase, log }, }) => { + const error = url.searchParams.get("error"); + const errorCode = url.searchParams.get("error_code"); + const errorDescription = url.searchParams.get("error_description"); + if (error || errorDescription) { + const errorMessage = errorDescription || error || "An error occurred!"; + logError( + 400, + errorMessage, + log, + { + error, + errorCode, + errorDescription, + }, + false, + ); + redirect(303, `/?toast_error=${encodeURIComponent(errorMessage)}`); + } + const code = url.searchParams.get("code"); if (!code) { logError( 500, - "Authorization code is missing.", + "Missing code parameter", log, - new Error("Authorization code not provided"), + new Error("Missing code parameter"), + false, ); + redirect(303, "/?toast_error=Missing+code+parameter"); } const { data, error: err } = await supabase.auth.exchangeCodeForSession(code); if (err) { - logError(500, "Authentication failed", log, err); + logError(500, "Failed to exchange code for session", log, err, false); + redirect(303, "/?toast_error=Failed+to+exchange+code+for+session"); } const { user } = data; - if (!user) { - logError( - 500, - "User data is missing.", - log, - new Error("User not returned after authentication"), - ); - } const { data: existingProfile, error: profileFetchError } = await supabase .from("profiles") @@ -38,12 +52,23 @@ export const GET: RequestHandler = async ({ .maybeSingle(); if (profileFetchError) { - logError(500, "Failed to fetch profile", log, profileFetchError); + logError(500, "Failed to retrieve profile", log, profileFetchError, false); + redirect(303, `/?toast_error=Failed+to+retrieve+profile`); } if (existingProfile?.onboarded) { redirect(303, "/dashboard"); } + const { error: profileUpdateError } = await supabase + .from("profiles") + .update({ verified: true }) + .eq("user_id", user.id); + + if (profileUpdateError) { + logError(500, "Failed to update profile", log, profileUpdateError, false); + redirect(303, `/?toast_error=Failed+to+update+profile`); + } + redirect(303, "/auth/complete-profile"); }; diff --git a/src/routes/(auth)/auth/confirm/+server.ts b/src/routes/(auth)/auth/confirm/+server.ts index ed9fa32f..89f23a4a 100644 --- a/src/routes/(auth)/auth/confirm/+server.ts +++ b/src/routes/(auth)/auth/confirm/+server.ts @@ -2,8 +2,29 @@ import type { RequestHandler } from "./$types"; import { redirect } from "@sveltejs/kit"; import { logError } from "$lib/server/logError"; -export const GET: RequestHandler = async ({ url, locals }) => { - const { supabase, log } = locals; +export const GET: RequestHandler = async ({ + url, + locals: { supabase, log }, +}) => { + const error = url.searchParams.get("error"); + const errorCode = url.searchParams.get("error_code"); + const errorDescription = url.searchParams.get("error_description"); + if (error || errorDescription) { + const errorMessage = errorDescription || error || "An error occurred!"; + logError( + 400, + errorMessage, + log, + { + error, + errorCode, + errorDescription, + }, + false, + ); + redirect(303, `/?toast_error=${encodeURIComponent(errorMessage)}`); + } + const code = url.searchParams.get("code"); if (!code) { logError( @@ -11,14 +32,17 @@ export const GET: RequestHandler = async ({ url, locals }) => { "Missing code parameter", log, new Error("Missing code parameter"), + false, ); + redirect(303, "/?toast_error=Missing+code+parameter"); } const { data, error: authErr } = await supabase.auth.exchangeCodeForSession(code); if (authErr) { - logError(500, "Failed to exchange code for session", log, authErr); + logError(500, "Failed to exchange code for session", log, authErr, false); + redirect(303, "/?toast_error=Failed+to+exchange+code+for+session"); } const user = data.user; @@ -30,7 +54,8 @@ export const GET: RequestHandler = async ({ url, locals }) => { .maybeSingle(); if (profileErr) { - logError(500, "Failed to check profile", log, profileErr); + logError(500, "Failed to retrieve profile", log, profileErr, false); + redirect(303, "/?toast_error=Failed+to+retrieve+profile"); } if (!existingProfile) { @@ -39,7 +64,9 @@ export const GET: RequestHandler = async ({ url, locals }) => { "No existing profile was found", log, new Error("No existing profile was found"), + false, ); + redirect(303, "/?toast_error=No+existing+profile+was+found"); } const { error: updateErr } = await supabase @@ -48,7 +75,8 @@ export const GET: RequestHandler = async ({ url, locals }) => { .eq("user_id", user.id); if (updateErr) { - logError(500, "Failed to update profile", log, updateErr); + logError(500, "Failed to update profile", log, updateErr, false); + redirect(303, "/?toast_error=Failed+to+update+profile"); } if (!existingProfile.onboarded) { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index f465e0a6..ae411489 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,20 +1,19 @@