Policies: verificar si usuario está loggeado

Clase 27 de 38Curso 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.

  1. Creación del archivo policy:
    • Dentro de la carpeta policies, crea un archivo llamado isLoggedIn.js.
    • Define una función que reciba los parámetros req, res y next.
module.exports = async function (req, res, next) {
    // arquitectura del código
};
  1. 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.
if (!req.headers || !req.headers.authorization) {
    return res.badRequest({ error: 'Authorization header not present' });
}
  1. 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);
  1. Extracción del usuario:
    • Usando el userId dentro del token decodificado, busca al usuario en la base de datos.
const user = await User.findOne({ id: decodedToken.userId });
if (!user) {
    return next(new Error('User not found'));
}
  1. Continúa la cadena de middleware:
    • Si el usuario es válido, adjunta el objeto usuario al req para utilizarlo posteriormente.
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:

  1. Edición del archivo policies.js:
    • Dentro de config del proyecto, localiza el archivo policies.js.
    • Define en qué controladores y acciones se aplicará la política isLoggedIn.
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.

  1. 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.
  2. 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.