Support chunked Better Auth session cookies
This commit is contained in:
+15
-4
@@ -5,12 +5,23 @@ const MOBILE_AUTH_COOKIE_HEADER = "x-beenvoice-auth-cookie";
|
||||
const MAX_AUTH_COOKIE_HEADER_LENGTH = 16 * 1024;
|
||||
|
||||
function looksLikeSessionCookie(cookie: string): boolean {
|
||||
return cookie.split(";").some((part) => {
|
||||
const name =
|
||||
part
|
||||
.trim()
|
||||
.split("=", 1)[0]
|
||||
?.replace(/^__Secure-/, "") ?? "";
|
||||
return (
|
||||
cookie.includes("session_token=") ||
|
||||
cookie.includes("session_data=") ||
|
||||
cookie.includes("better-auth.session_token=") ||
|
||||
cookie.includes("__Secure-better-auth.session_token=")
|
||||
name === "better-auth.session_token" ||
|
||||
name === "better-auth.session_data" ||
|
||||
name.startsWith("better-auth.session_token.") ||
|
||||
name.startsWith("better-auth.session_data.") ||
|
||||
name.endsWith(".session_token") ||
|
||||
name.endsWith(".session_data") ||
|
||||
name.includes(".session_token.") ||
|
||||
name.includes(".session_data.")
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function headersWithAuthCookieFallback(headers: Headers): Headers {
|
||||
|
||||
+11
-6
@@ -3,6 +3,16 @@ import type { NextRequest } from "next/server";
|
||||
import { isPublicRoute } from "~/lib/public-routes";
|
||||
import { safeCallbackPath } from "~/lib/safe-callback-url";
|
||||
|
||||
function hasBetterAuthSessionCookie(request: NextRequest) {
|
||||
return request.cookies.getAll().some(({ name }) => {
|
||||
const cookieName = name.replace(/^__Secure-/, "");
|
||||
return (
|
||||
cookieName === "better-auth.session_token" ||
|
||||
cookieName.startsWith("better-auth.session_token.")
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function proxy(request: NextRequest) {
|
||||
const { pathname } = request.nextUrl;
|
||||
|
||||
@@ -19,13 +29,8 @@ export function proxy(request: NextRequest) {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
// Check for session token in cookies (Better Auth cookie names)
|
||||
const sessionToken =
|
||||
request.cookies.get("better-auth.session_token")?.value ??
|
||||
request.cookies.get("__Secure-better-auth.session_token")?.value;
|
||||
|
||||
// If no session token, redirect to sign-in
|
||||
if (!sessionToken) {
|
||||
if (!hasBetterAuthSessionCookie(request)) {
|
||||
const signInUrl = new URL("/auth/signin", request.url);
|
||||
signInUrl.searchParams.set(
|
||||
"callbackUrl",
|
||||
|
||||
Reference in New Issue
Block a user