Policies: verificar si usuario está loggeado
Clase 27 de 38 • Curso de Desarrollo de APIs con Sails.js
Resumen
¿Cómo validar un token en una API?
La validación de tokens es fundamental en la seguridad de las aplicaciones web y de APIs. Especialmente si necesitas proteger recursos o acciones específicas basadas en las credenciales de un usuario. Vamos a explorar cómo crear una política de validación de un token siguiendo el código proporcionado.
¿Qué es una policy y cómo crearla?
Una policy o política se encarga de definir acciones específicas en función de ciertos criterios de autorización de usuarios. En nuestro caso, creamos una política para validar un token de usuario.
- Creación del archivo policy:
- Dentro de la carpeta
policies
, crea un archivo llamadoisLoggedIn.js
. - Define una función que reciba los parámetros
req
,res
ynext
.
- Dentro de la carpeta
module.exports = async function (req, res, next) {
// arquitectura del código
};
- Validación del token:
- Verifica si el token está presente en el encabezado
Authorization
. - Si no está presente, devuelve un error 400 indicando la falta del header de autorización.
- Verifica si el token está presente en el encabezado
if (!req.headers || !req.headers.authorization) {
return res.badRequest({ error: 'Authorization header not present' });
}
- Decodificación y verificación del token:
- Extrae el token del encabezado y usa el servicio de autenticación (previamente creado) para decodificarlo y verificarlo.
const token = req.headers.authorization;
const decodedToken = AuthService.jwtVerify(token);
- Extracción del usuario:
- Usando el
userId
dentro del token decodificado, busca al usuario en la base de datos.
- Usando el
const user = await User.findOne({ id: decodedToken.userId });
if (!user) {
return next(new Error('User not found'));
}
- Continúa la cadena de middleware:
- Si el usuario es válido, adjunta el objeto usuario al
req
para utilizarlo posteriormente.
- Si el usuario es válido, adjunta el objeto usuario al
req.user = user;
next();
¿Cómo aplicar una policy en Sails.js?
Por defecto, podemos aplicar la política a todos los endpoints o a específicos:
- Edición del archivo
policies.js
:- Dentro de
config
del proyecto, localiza el archivopolicies.js
. - Define en qué controladores y acciones se aplicará la política
isLoggedIn
.
- Dentro de
module.exports.policies = {
RaidController: {
'*': 'isLoggedIn',
'create': true, // excepciones
}
};
¿Cómo interactúa el token con Postman?
Con la política ya implementada, ahora es crucial entender cómo interactuar con ella en herramientas como Postman.
-
Verificación de token:
- Envía solicitudes pasando el token en el encabezado
Authorization
. - Observa cómo una solicitud incorrecta debido a un token inválido es rechazada automáticamente.
- Envía solicitudes pasando el token en el encabezado
-
Demostración práctica:
- Al cambiar caracteres del token, podrás ver cómo se rechazan solicitudes. Esto ilustra que cualquier alteración hace que el token sea inválido, demostrando la seguridad de las implementaciones.
Ahora, con esta estructura y el apoyo de una plataforma como Postman, deberías ser capaz de gestionar eficazmente las validaciones y aplicaciones de tokens en tus APIs de una manera segura y controlada. A medida que desarrolles más funcionalidades, asegúrate de seguir la lógica demostrada aquí, para garantizar la integridad de tu aplicación.