Hola a todos, estoy creando un sitio con javascript y necesito autenticación para verificar si es un administrador o un cliente para redirigirlo de diferentes maneras, pero tengo un problema cuando intento verificar las propiedades No se pueden leer de indefinido .
Mi verificación de autorización
module.exports = async function(req, res, next){ if(req.isAuthenticated()){ const utilizador = req.Utilizador; if(utilizador.funcao==='admin'){ next(); }else{ res.redirect('back'); } }else{ res.redirect('/utilizadores/login'); }};
El modelo
const mongoose = require('mongoose'); const utilizadorSchema = mongoose.Schema({ nome:{ type: String, required: true }, email:{ type: String, required: true }, password:{ type: String, required: true }, funcao:{ type: String, required: true, default: 'customer' }, fidelizacao:{ type:Number, default:0 }, carrinho:[{ livro:{ type: mongoose.Schema.Types.ObjectId, ref: "Livro", }, quantidade:{ type: Number, required: true, default: 1 } }] }); module.exports = mongoose.model("Utilizador", utilizadorSchema);El error
TypeError: no se pueden leer las propiedades de undefined (leyendo 'funcao')
at module.exports (C:\Users\cardo\Desktop\book--store--nodejs-master\middleware\checkAuthorization.js:4:24)¿Alguien puede arreglarme? Estoy viendo el código durante horas y no puedo entender...
El error significa que req.Utilizador utilizador no está undefined y por lo tanto funcao no es una propiedad válida del mismo.
Para corregir este error específico, sugiero usar el encadenamiento opcional ;
if (utilizador?.funcao === 'admin') { next(); } else { res.redirect('back'); } A continuación, probablemente debería verificar por qué no se define req.Utilizador , suponiendo que debería estar en la lógica de su aplicación.