I am using supabase
for authentication and next-intl
for localisation, both require middleware. Everything works as expected however, when redirecting using return redirect("/");
it doesn’t re-route to the localised url – what’s the reason for this?
Here is my middleware code;
<code>import { createServerClient } from "@supabase/ssr";
import { NextResponse, type NextRequest } from "next/server";
import createMiddleware from "next-intl/middleware";
const intlMiddleware = createMiddleware({
locales: ["ka", "en"],
defaultLocale: "en",
});
export async function updateSession(request: NextRequest) {
let intlResponse = intlMiddleware(request);
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, options }) => request.cookies.set(name, value));
intlResponse = NextResponse.next({
request,
});
cookiesToSet.forEach(({ name, value, options }) =>
intlResponse.cookies.set(name, value, options)
);
},
},
}
);
const {
data: { user },
} = await supabase.auth.getUser();
if (!user && request.nextUrl.pathname.includes("/account")) {
const url = request.nextUrl.clone();
url.pathname = "/sign-in";
return NextResponse.redirect(url);
}
return intlResponse;
}
</code>
<code>import { createServerClient } from "@supabase/ssr";
import { NextResponse, type NextRequest } from "next/server";
import createMiddleware from "next-intl/middleware";
const intlMiddleware = createMiddleware({
locales: ["ka", "en"],
defaultLocale: "en",
});
export async function updateSession(request: NextRequest) {
let intlResponse = intlMiddleware(request);
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, options }) => request.cookies.set(name, value));
intlResponse = NextResponse.next({
request,
});
cookiesToSet.forEach(({ name, value, options }) =>
intlResponse.cookies.set(name, value, options)
);
},
},
}
);
const {
data: { user },
} = await supabase.auth.getUser();
if (!user && request.nextUrl.pathname.includes("/account")) {
const url = request.nextUrl.clone();
url.pathname = "/sign-in";
return NextResponse.redirect(url);
}
return intlResponse;
}
</code>
import { createServerClient } from "@supabase/ssr";
import { NextResponse, type NextRequest } from "next/server";
import createMiddleware from "next-intl/middleware";
const intlMiddleware = createMiddleware({
locales: ["ka", "en"],
defaultLocale: "en",
});
export async function updateSession(request: NextRequest) {
let intlResponse = intlMiddleware(request);
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, options }) => request.cookies.set(name, value));
intlResponse = NextResponse.next({
request,
});
cookiesToSet.forEach(({ name, value, options }) =>
intlResponse.cookies.set(name, value, options)
);
},
},
}
);
const {
data: { user },
} = await supabase.auth.getUser();
if (!user && request.nextUrl.pathname.includes("/account")) {
const url = request.nextUrl.clone();
url.pathname = "/sign-in";
return NextResponse.redirect(url);
}
return intlResponse;
}
root middleware file;
<code>import { type NextRequest } from "next/server";
import { updateSession } from "@/utils/supabase/middleware";
export async function middleware(request: NextRequest) {
return await updateSession(request);
}
export const config = {
matcher: [
"/",
"/(ka|en)/:path*",
"/((?!_next/static|_next/image|favicon.ico|.*\.(?:svg|png|jpg|jpeg|gif|webp)$).*)",
],
};
</code>
<code>import { type NextRequest } from "next/server";
import { updateSession } from "@/utils/supabase/middleware";
export async function middleware(request: NextRequest) {
return await updateSession(request);
}
export const config = {
matcher: [
"/",
"/(ka|en)/:path*",
"/((?!_next/static|_next/image|favicon.ico|.*\.(?:svg|png|jpg|jpeg|gif|webp)$).*)",
],
};
</code>
import { type NextRequest } from "next/server";
import { updateSession } from "@/utils/supabase/middleware";
export async function middleware(request: NextRequest) {
return await updateSession(request);
}
export const config = {
matcher: [
"/",
"/(ka|en)/:path*",
"/((?!_next/static|_next/image|favicon.ico|.*\.(?:svg|png|jpg|jpeg|gif|webp)$).*)",
],
};