diff --git a/src/lib/auth-server.ts b/src/lib/auth-server.ts index 9384a02..75a962f 100644 --- a/src/lib/auth-server.ts +++ b/src/lib/auth-server.ts @@ -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.includes("session_token=") || - cookie.includes("session_data=") || - cookie.includes("better-auth.session_token=") || - cookie.includes("__Secure-better-auth.session_token=") - ); + return cookie.split(";").some((part) => { + const name = + part + .trim() + .split("=", 1)[0] + ?.replace(/^__Secure-/, "") ?? ""; + return ( + 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 { diff --git a/src/proxy.ts b/src/proxy.ts index 95b2eb5..a472655 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -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",