así que tengo el problema de que mi user._id coincide con "61a242dffecd0e0f7b3e36b8" pero siempre elige la declaración else ¿estoy haciendo algo mal?
const user = await User.findById(req.params.id); if ("61a242dffecd0e0f7b3e36b8" === user._id) { res.send("hello"); } else { return res.send({ message: "access denied" }); } además, la cadena coincide con el usuario._id y cuando console.log(user._id) devuelve esto:
new ObjectId("61a242dffecd0e0f7b3e36b8")además, esto coincide con el usuario._id pero nuevamente no elige la declaración if
Eso es porque estás usando igualdad estricta === y los tipos no son iguales. El user._id devuelto es del tipo mongoose.Types.ObjectId (o algo similar). Sin embargo, mongoose.Types.ObjectId tiene un método toString() , por lo que si lo consola.log, parece ser una cadena. Prueba esto:
const user = await User.findById(req.params.id); if ("61a242dffecd0e0f7b3e36b8" === user._id.toString()) { res.send("hello"); } else { return res.send({ message: "access denied" }); }Puede envolver la identificación que desea verificar con ObjectId antes de la verificación.
Aquí hay un fragmento que funcionaría
const { ObjectId } = require('mongoose').Types const user = await User.findById(req.params.id); if (ObjectId("61a242dffecd0e0f7b3e36b8") === user._id) { res.send("hello"); } else { return res.send({ message: "access denied" }); }const user = await User.findById(req.params.id); if(user == null) throw new Error("User Not Found"); if (user._id.toString() === "61a242dffecd0e0f7b3e36b8") { res.send("hello"); } else { return res.send({ message: "access denied" }); }