Cambios en refresh token para no dar error. No actualiza access token de la cookie/session. Elimina access token de la cookie para forzar cerrar la session en caso de error
This commit is contained in:
@@ -6,7 +6,12 @@ import { cache } from 'react';
|
||||
export const getValidAccessToken = cache(async () => {
|
||||
const session = await auth();
|
||||
|
||||
if (!session?.access_token) return null;
|
||||
if (!session?.access_token) {
|
||||
// console.log('No hay Access Token');
|
||||
return null
|
||||
}
|
||||
// console.log('Si hay Access Token');
|
||||
|
||||
|
||||
const now = Math.floor(Date.now() / 1000);
|
||||
// Restamos 10s para tener margen de seguridad
|
||||
@@ -14,24 +19,35 @@ export const getValidAccessToken = cache(async () => {
|
||||
|
||||
// A. Si es válido, lo retornamos directo
|
||||
if (isValid) return session.access_token;
|
||||
// console.log('Access Token Expiró');
|
||||
|
||||
|
||||
// B. Si expiró, buscamos la cookie
|
||||
const cookieStore = cookies();
|
||||
const refreshToken = (await cookieStore).get('refresh_token')?.value;
|
||||
const refreshTokenCookie = await cookieStore
|
||||
const refreshToken = refreshTokenCookie.get('refresh_token')?.value;
|
||||
|
||||
if (!refreshToken) {
|
||||
// console.log('No hay Refresh Token');
|
||||
return null
|
||||
} // No hay refresh token, fin del juego
|
||||
// console.log('Si hay Refresh Token');
|
||||
|
||||
if (!refreshToken) return null; // No hay refresh token, fin del juego
|
||||
|
||||
// C. Intentamos refrescar
|
||||
const newTokens = await resfreshTokenAction({ token: refreshToken });
|
||||
const newTokens = await resfreshTokenAction({ refreshToken });
|
||||
|
||||
if (!newTokens) {
|
||||
// console.log('No hay token nuevo');
|
||||
// Si falla el refresh (token revocado o expirado), borramos cookie
|
||||
(await cookieStore).delete('refresh_token');
|
||||
(await cookieStore).delete('authjs.session-token');
|
||||
return null;
|
||||
}
|
||||
// console.log('Si hay token nuevo');
|
||||
|
||||
// D. Guardamos el nuevo refresh token en cookie y retornamos el access token
|
||||
(await cookieStore).set('refresh_token', newTokens.tokens.refresh_token, {
|
||||
(await cookieStore).set('refresh_token', newTokens.refresh_token, {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
sameSite: 'lax',
|
||||
@@ -39,5 +55,13 @@ export const getValidAccessToken = cache(async () => {
|
||||
maxAge: 7 * 24 * 60 * 60,
|
||||
});
|
||||
|
||||
return newTokens.tokens.access_token;
|
||||
// (await cookieStore).set('authjs.session-token', newTokens.access_token, {
|
||||
// httpOnly: true,
|
||||
// secure: process.env.NODE_ENV === 'production',
|
||||
// sameSite: 'lax',
|
||||
// path: '/',
|
||||
// maxAge: 7 * 24 * 60 * 60,
|
||||
// });
|
||||
|
||||
return newTokens.access_token;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user