diff --git a/apps/web/app/auth/confirm/route.ts b/apps/web/app/auth/confirm/route.ts index 9f22193cf..ea8a13f35 100644 --- a/apps/web/app/auth/confirm/route.ts +++ b/apps/web/app/auth/confirm/route.ts @@ -10,13 +10,27 @@ const defaultNextUrl = pathsConfig.app.home; export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); + const token_hash = searchParams.get('token_hash'); const type = searchParams.get('type') as EmailOtpType | null; const next = searchParams.get('next') ?? defaultNextUrl; + const callbackParam = searchParams.get('callback'); + const callbackUrl = callbackParam ? new URL(callbackParam) : null; + const inviteToken = callbackUrl?.searchParams.get('invite_token'); const redirectTo = request.nextUrl.clone(); redirectTo.pathname = next; + // if we have an invite token, we append it to the redirect url + if (inviteToken) { + // if we have an invite token, we redirect to the join team page + // instead of the default next url. This is because the user is trying + // to join a team and we want to make sure they are redirected to the + // correct page. + redirectTo.pathname = pathsConfig.app.joinTeam; + redirectTo.searchParams.set('invite_token', inviteToken); + } + if (token_hash && type) { const supabase = getSupabaseRouteHandlerClient();