Fix: Weiterleitungen übernehmen nicht mehr die Server-Bindung 0.0.0.0
Nach dem Abmelden landete man auf 0.0.0.0:3000, weil die absolute Redirect-URL aus request.url gebaut wurde und dort seit der Bindung an 0.0.0.0 die Server-Adresse statt des aufgerufenen Hosts steht. Logout leitet jetzt relativ weiter; der Proxy baut die URL aus dem Host-Header des Browsers (inkl. x-forwarded-proto hinter Proxies).
This commit is contained in:
+7
-1
@@ -8,5 +8,11 @@ export async function POST(request: Request) {
|
||||
}
|
||||
const supabase = await createClient();
|
||||
await supabase.auth.signOut();
|
||||
return NextResponse.redirect(new URL("/login", request.url), { status: 303 });
|
||||
// Relative Weiterleitung: bei einer absoluten URL aus request.url landet
|
||||
// sonst die Server-Bindung (0.0.0.0) statt des aufgerufenen Hosts im
|
||||
// Location-Header.
|
||||
return new NextResponse(null, {
|
||||
status: 303,
|
||||
headers: { Location: "/login" },
|
||||
});
|
||||
}
|
||||
|
||||
@@ -31,10 +31,14 @@ export async function proxy(request: NextRequest) {
|
||||
} = await supabase.auth.getUser();
|
||||
|
||||
if (!user) {
|
||||
const url = request.nextUrl.clone();
|
||||
url.pathname = "/login";
|
||||
url.search = "";
|
||||
return NextResponse.redirect(url);
|
||||
// Absolute URL aus dem Host-Header des Browsers bauen: request.nextUrl
|
||||
// trägt bei "-H 0.0.0.0" die Server-Bindung statt des aufgerufenen
|
||||
// Hosts, und relative Location-Header lehnt die Middleware ab.
|
||||
const host = request.headers.get("host") ?? request.nextUrl.host;
|
||||
const proto =
|
||||
request.headers.get("x-forwarded-proto") ??
|
||||
request.nextUrl.protocol.replace(":", "");
|
||||
return NextResponse.redirect(`${proto}://${host}/login`, 303);
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
Reference in New Issue
Block a user