Nos falto el ejemplo practico para implementar un refresh token 😦
Introducción
Cómo autenticar usuarios con Node.js
Autenticación vs. autorización
Tienda en línea: instalación del proyecto
Protección de contraseñas
Middleware de verificación
Hashing de contraseñas con bcryptjs
Implementando hashing para usuarios
Passport y JSON Web Tokens
Implemetando login con Passport.js
¿Qué es un JWT?
Firmar y verificar tokens
Generar JWT en el servicio
Protección de rutas
Control de roles
Obteniendo órdenes del perfil
Manejo de la autenticación desde el cliente
Envío de emails con Node.js
Cómo enviar emails con Node.js
Implementando el envío de emails
Recuperación de contraseñas
Generando links de recuperación
Validando tokens para cambio de contraseña
Despliegue a producción
Deploy en Heroku
Próximos pasos
Cómo seguir aprendiendo backend con Node.js
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 5
Preguntas 5
Nos falto el ejemplo practico para implementar un refresh token 😦
Consideraciones a tener en cuenta:
Al hacer un login en la API nos da la información del usuario, pero también envían el token. Lo más importante es guardar el token porque debe enviarse en todas las peticiones.
Hola devs!! acá led dejo un artículo súper práctico para la implementación de los refresh token -> click aquí
HAPPY CODING!
Como que esto debió haber sido parte del curso en lugar de nomás mencionarlo, no? 😐
Acá un ejemplo de cómo se podría implementar el refresh-token desde el cliente, (no es del proyecto que estamos haciendo en este curso pero puede ser útil para entender la lógica):
export const RefreshTokenService = async (): Promise<boolean> => {
try {
await axios.get(`${GLOBALS.API_HOST}/api/session/refresh`, {
withCredentials: true,
});
return true;
} catch (err) {
return false;
}
};
// En este caso es una función para añadir un producto a los favoritos a partir de su id.
// El parametro it es un contador de los intentos que sirve para intentar refrescar el
// access token una sola vez.
export const AddToFavoritesService = async (it: number, id: string): Promise<boolean> => {
// Si luego de intentar refrescar el access-token sigue fallando, retorna false como
// indicador de que no se pudo realizar.
if (it > 2) return false;
try {
// Intenta añadir a favoritos
const payload = { id };
const response = await axios.post(`${GLOBALS.API_HOST}/api/user/favorites`, payload, {
withCredentials: true,
});
return response.status === 200 ? true : false;
} catch (err) {
// Si el servidor response algo diferente a 200 (OK) axios lo tomará como error
// Por lo que entrará a este catch
if (axios.isAxiosError(err)) {
// El código de estado 403 es el que nos indica en este caso que el access-token
// está vencido o no es válido
if (err.response?.status === 403) {
// Ejecutamos la función para refrescar el token
await RefreshTokenService();
// Hacemos una llamada recursiva a la función de añadir a favoritos para intentar
// de nuevo, pero aumentamos en uno el contador de iteraciones para poner el límite.
return await AddToFavoritesService(++it, id);
}
return false;
}
return false;
}
};
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.