52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import type { NextAuthConfig } from "next-auth";
|
|
import { isIP } from "node:net";
|
|
|
|
export function buildAuthConfig(authUrl?: string | null): NextAuthConfig {
|
|
const resolvedAuthUrl = authUrl || process.env.AUTH_URL || "";
|
|
const isSecure = resolvedAuthUrl.startsWith("https://");
|
|
const hostName = resolvedAuthUrl ? new URL(resolvedAuthUrl).hostname : undefined;
|
|
// Browsers may reject `Domain` cookies for IP hosts; keep them host-only in that case.
|
|
const cookieDomain =
|
|
hostName && hostName !== "localhost" && isIP(hostName) === 0 ? hostName : undefined;
|
|
|
|
return {
|
|
trustHost: true,
|
|
pages: {
|
|
signIn: "/login",
|
|
newUser: "/",
|
|
},
|
|
cookies: {
|
|
sessionToken: {
|
|
name: isSecure ? "__Secure-authjs.session-token" : "authjs.session-token",
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: isSecure,
|
|
domain: cookieDomain,
|
|
},
|
|
},
|
|
callbackUrl: {
|
|
name: isSecure ? "__Secure-authjs.callback-url" : "authjs.callback-url",
|
|
options: {
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: isSecure,
|
|
domain: cookieDomain,
|
|
},
|
|
},
|
|
csrfToken: {
|
|
name: isSecure ? "__Host-authjs.csrf-token" : "authjs.csrf-token",
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: isSecure,
|
|
},
|
|
},
|
|
},
|
|
providers: [],
|
|
callbacks: {},
|
|
};
|
|
}
|