¿Cómo autorizar o denegar rutas en Node.JS si un usuario no cumple una condición?

publicado por: user10093

Ando desarrollando un proyecto para la escuela (NodeJS y MondoDB). Intento bloquear rutas para ususarios sin privilegios. En Jade implementé la siguiente condición en un layout: if user.isAdmin == true. O sea, en el frontend bloquea la ruta y no se visualiza en la navbar si el usuario no tiene el checkbox verificado.

Había intentado hacer en el backend, digamos, en la ruta:

route.get("/admin", function(req, res){
   if(req.body.isAdmin == true){
      res.render("app/admin");
   }else{
      /*Por ejemplo*/
      res.send("No es administrador");
   }
});

Pero eso se aplica para las peticiones que vienen de un formulario, no?
Por si a caso, debo mencionar que tengo un middleware que maneja las sesiones:

module.exports = function(req, res, next){
    if(!req.session.user_id){
        res.redirect("/login");
    }else{
        User.findById(req.session.user_id, function(err, user){
            if(err){
                console.log(err);
                res.redirect("/login");
            }else{
                res.locals = {user: user};
                next();
            }
        });
    }
}

Entonces, ¿cómo podría manejar los datos de la sesión actual en el backend?

solución

ya casi lo tienes, dado que tu middleware recupera user y lo mete en res.locals tan solo te queda filtrar por ese valor.

 route.get('/admin', function(req, res, next) {
   if (!res.locals.user.isAdmin) {
     return res.sendStatus(401);
   }  

   // y sigues con la lógica de /admin
   res.send('Admin page');

 });
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *