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;
|
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
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user