Support chunked Better Auth session cookies

This commit is contained in:
2026-06-29 17:57:38 -04:00
parent 1605322bc9
commit fb731885de
2 changed files with 28 additions and 12 deletions
+15 -4
View File
@@ -5,12 +5,23 @@ const MOBILE_AUTH_COOKIE_HEADER = "x-beenvoice-auth-cookie";
const MAX_AUTH_COOKIE_HEADER_LENGTH = 16 * 1024; const MAX_AUTH_COOKIE_HEADER_LENGTH = 16 * 1024;
function looksLikeSessionCookie(cookie: string): boolean { function looksLikeSessionCookie(cookie: string): boolean {
return cookie.split(";").some((part) => {
const name =
part
.trim()
.split("=", 1)[0]
?.replace(/^__Secure-/, "") ?? "";
return ( return (
cookie.includes("session_token=") || name === "better-auth.session_token" ||
cookie.includes("session_data=") || name === "better-auth.session_data" ||
cookie.includes("better-auth.session_token=") || name.startsWith("better-auth.session_token.") ||
cookie.includes("__Secure-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 { export function headersWithAuthCookieFallback(headers: Headers): Headers {
+11 -6
View File
@@ -3,6 +3,16 @@ import type { NextRequest } from "next/server";
import { isPublicRoute } from "~/lib/public-routes"; import { isPublicRoute } from "~/lib/public-routes";
import { safeCallbackPath } from "~/lib/safe-callback-url"; 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) { export function proxy(request: NextRequest) {
const { pathname } = request.nextUrl; const { pathname } = request.nextUrl;
@@ -19,13 +29,8 @@ export function proxy(request: NextRequest) {
return NextResponse.next(); 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 no session token, redirect to sign-in
if (!sessionToken) { if (!hasBetterAuthSessionCookie(request)) {
const signInUrl = new URL("/auth/signin", request.url); const signInUrl = new URL("/auth/signin", request.url);
signInUrl.searchParams.set( signInUrl.searchParams.set(
"callbackUrl", "callbackUrl",