Ctrl K
ComunidadGuías…

middleware.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { type NextRequest, NextResponse } from 'next/server';

import { type CookieOptions, createServerClient } from '@supabase/ssr';
import { urls } from 'config/urls';

export async function middleware(request: NextRequest) {
  const hostname = request.headers.get('host');
  const url = request.nextUrl;
  const currentHost = hostname?.replace(`.${urls.homeWithoutProtocol}`, '');

  let response = NextResponse.next({ request: { headers: request.headers } });

  const supabase = createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll() {
          return request.cookies.getAll();
        },
        setAll(cookiesToSet) {
          cookiesToSet.forEach(({ name, value }) =>
            request.cookies.set(name, value),
          );
          response = NextResponse.next({ request });
          cookiesToSet.forEach(({ name, value, options }) =>
            response.cookies.set(name, value, options),
          );
        },
      },
    },
  );

  const {
    data: { user },
  } = await supabase.auth.getUser();

  if (currentHost === 'app') {
    if (url.pathname === '/intro' || url.pathname === '/import') {
      return response;
    }
    if (url.pathname === '/account') {
      if (user) {
        url.pathname = '/';
        return NextResponse.redirect(url);
      }
      return response;
    }
    url.pathname = `/app${url.pathname}`;
    return NextResponse.rewrite(url);
  }

  return response;
}

export const config = {
  matcher: [
    '/',
    /*
     * Match all request paths except for the ones starting with:
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * Feel free to modify this pattern to include more paths.
     */
    '/((?!_next/static|_next/image|favicon.ico|manifest.webmanifest|robots.txt|icons|images|demo|api/).*)',
  ],
};