I want to set maxAge to the value that BE gives me. BE gives me back: “expires”: “2024-07-23T22:12:36.505Z” and I want that NextAuth session to be equal to this value for example. How to achieve that?
I don’t want to set maxAge to a static value, because maxAge of the session can change from time to time and BE gives that in the format: “expires”: “2024-07-23T22:12:36.505Z”
<code>import NextAuth, { Session } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { JWT } from 'next-auth/jwt';
import { cookies } from 'next/headers';
let backendsSessionMaxAge: number;
let backendSessionName: string;
const authOptions = {
providers: [
CredentialsProvider({
name: 'Credentials',
credentials: {
email: { type: 'email' },
},
async authorize(credentials, req) {
try {
const response = await fetch(
`${ENV_VARIABLE}/login`,
{
method: 'POST',
}
);
if (response.ok) {
const user = await response.json();
const setCookieHeader = response.headers.get('set-cookie');
if (setCookieHeader) {
backendSessionName = setCookieHeader.split('=')[0];
const backendSessionValue = setCookieHeader
.split(';')[0]
.split('=')[1];
const maxAgeRegex = /Max-Age=(d+)/;
const match = setCookieHeader.match(maxAgeRegex);
backendSessionMaxAge= match ? Number(match[1]) : 0;
cookies().set({
name: backendSessionName,
value: backendSessionValue,
httpOnly: true,
sameSite: 'lax',
path: '/',
maxAge: backendSessionMaxAge,
});
}
return user;
} else {
console.error('Invalid email:', response.status);
}
} catch (error) {
console.error('Login Service not available: ', error);
}
},
}),
],
callbacks: {
async jwt({
token,
user,
trigger,
session,
}: {
token: JWT;
user: Session['user'];
trigger?: JWT['trigger'];
session?: Session;
}) {
if (user) {
token.user = user;
}
if (trigger === 'update' && session) {
token = { ...token, user: session };
}
return token;
},
async session({ session, token }: { session: Session; token: JWT }) {
if (token.user) {
session.user = token.user;
}
// Dynamically set the session expires
if (backendSessionMaxAge) {
const expirationDate = new Date(
Date.now() + backendSessionMaxAge * 1000
).toISOString();
session.expires = expirationDate;
}
return session;
},
async redirect({ url, baseUrl }: { url: string; baseUrl: string }) {
if (url.startsWith('/')) return `${baseUrl}${url}`;
else if (new URL(url).origin === baseUrl) return url;
return baseUrl;
},
},
events: {
async signOut() {
cookies().set('backend-session ', '', { httpOnly: true, sameSite: 'lax' });
// empty custom cookie value
},
},
session: {
maxAge: 50, //50 seconds
// || backendSessionMaxAge didnt get it work
</code>
<code>import NextAuth, { Session } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { JWT } from 'next-auth/jwt';
import { cookies } from 'next/headers';
let backendsSessionMaxAge: number;
let backendSessionName: string;
const authOptions = {
providers: [
CredentialsProvider({
name: 'Credentials',
credentials: {
email: { type: 'email' },
},
async authorize(credentials, req) {
try {
const response = await fetch(
`${ENV_VARIABLE}/login`,
{
method: 'POST',
}
);
if (response.ok) {
const user = await response.json();
const setCookieHeader = response.headers.get('set-cookie');
if (setCookieHeader) {
backendSessionName = setCookieHeader.split('=')[0];
const backendSessionValue = setCookieHeader
.split(';')[0]
.split('=')[1];
const maxAgeRegex = /Max-Age=(d+)/;
const match = setCookieHeader.match(maxAgeRegex);
backendSessionMaxAge= match ? Number(match[1]) : 0;
cookies().set({
name: backendSessionName,
value: backendSessionValue,
httpOnly: true,
sameSite: 'lax',
path: '/',
maxAge: backendSessionMaxAge,
});
}
return user;
} else {
console.error('Invalid email:', response.status);
}
} catch (error) {
console.error('Login Service not available: ', error);
}
},
}),
],
callbacks: {
async jwt({
token,
user,
trigger,
session,
}: {
token: JWT;
user: Session['user'];
trigger?: JWT['trigger'];
session?: Session;
}) {
if (user) {
token.user = user;
}
if (trigger === 'update' && session) {
token = { ...token, user: session };
}
return token;
},
async session({ session, token }: { session: Session; token: JWT }) {
if (token.user) {
session.user = token.user;
}
// Dynamically set the session expires
if (backendSessionMaxAge) {
const expirationDate = new Date(
Date.now() + backendSessionMaxAge * 1000
).toISOString();
session.expires = expirationDate;
}
return session;
},
async redirect({ url, baseUrl }: { url: string; baseUrl: string }) {
if (url.startsWith('/')) return `${baseUrl}${url}`;
else if (new URL(url).origin === baseUrl) return url;
return baseUrl;
},
},
events: {
async signOut() {
cookies().set('backend-session ', '', { httpOnly: true, sameSite: 'lax' });
// empty custom cookie value
},
},
session: {
maxAge: 50, //50 seconds
// || backendSessionMaxAge didnt get it work
</code>
import NextAuth, { Session } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { JWT } from 'next-auth/jwt';
import { cookies } from 'next/headers';
let backendsSessionMaxAge: number;
let backendSessionName: string;
const authOptions = {
providers: [
CredentialsProvider({
name: 'Credentials',
credentials: {
email: { type: 'email' },
},
async authorize(credentials, req) {
try {
const response = await fetch(
`${ENV_VARIABLE}/login`,
{
method: 'POST',
}
);
if (response.ok) {
const user = await response.json();
const setCookieHeader = response.headers.get('set-cookie');
if (setCookieHeader) {
backendSessionName = setCookieHeader.split('=')[0];
const backendSessionValue = setCookieHeader
.split(';')[0]
.split('=')[1];
const maxAgeRegex = /Max-Age=(d+)/;
const match = setCookieHeader.match(maxAgeRegex);
backendSessionMaxAge= match ? Number(match[1]) : 0;
cookies().set({
name: backendSessionName,
value: backendSessionValue,
httpOnly: true,
sameSite: 'lax',
path: '/',
maxAge: backendSessionMaxAge,
});
}
return user;
} else {
console.error('Invalid email:', response.status);
}
} catch (error) {
console.error('Login Service not available: ', error);
}
},
}),
],
callbacks: {
async jwt({
token,
user,
trigger,
session,
}: {
token: JWT;
user: Session['user'];
trigger?: JWT['trigger'];
session?: Session;
}) {
if (user) {
token.user = user;
}
if (trigger === 'update' && session) {
token = { ...token, user: session };
}
return token;
},
async session({ session, token }: { session: Session; token: JWT }) {
if (token.user) {
session.user = token.user;
}
// Dynamically set the session expires
if (backendSessionMaxAge) {
const expirationDate = new Date(
Date.now() + backendSessionMaxAge * 1000
).toISOString();
session.expires = expirationDate;
}
return session;
},
async redirect({ url, baseUrl }: { url: string; baseUrl: string }) {
if (url.startsWith('/')) return `${baseUrl}${url}`;
else if (new URL(url).origin === baseUrl) return url;
return baseUrl;
},
},
events: {
async signOut() {
cookies().set('backend-session ', '', { httpOnly: true, sameSite: 'lax' });
// empty custom cookie value
},
},
session: {
maxAge: 50, //50 seconds
// || backendSessionMaxAge didnt get it work
},
<code> pages: { signIn: '/login' },
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
</code>
<code> pages: { signIn: '/login' },
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
</code>
pages: { signIn: '/login' },
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };