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
Convierte tus certificados en títulos universitarios en USA
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Aportes 7
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!
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;
}
};
Como que esto debió haber sido parte del curso en lugar de nomás mencionarlo, no? 😐
Con un token empezamos a manejar la capa de autenticación y de autorización desde el lado del backen, pero del lado de los clientes es diferente, lo hacen a través de una interfaz creada por Angular, React o Vue que se conectan a la API y manejan las sesiones, cuando se hace login, nos envía toda la información relacionada con el usuario: nombre, email, datos de fechas, incluso un avatar y lo más importante el token, todo esto se debe almacenar para tener mas accesos.
Las fases o etapas a considerar desde el punto de vista de la sesión del cliente, es decir desde el Browser o la app (aplicaciones móviles) son las siguientes:
En el login nos mandan el token, este debemos guardarlo porque lo enviaremos en todas las peticiones.
Podemos guardar el token en Cookies (lo más recomendado) o en LocalStorage (no es la mejor práctica).
Es muy usado en bancos el ‘refresh token’ por medidas de seguridad, por ejemplo, cada 15 minutos expira el token y sacamos al usuario de la sesión y debe de vovler a hacer login.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?