I try this code using lama dev on youtube. and I am getting this error on postman i copy the access token and wher i use it, it display( token is not valid), but is this same token as the user, as the video.
when i look in the terminal it shows( cannot read property id of undefined) or cannot read property isAdmin of undefined)
I dont know how to solve it, if the problem is the code or i dont know how to use postman. I AM A NOVICE IN CODE
this is route file named verifytoken.js
const jwt = require("jsonwebtoken")
const verifyToken = (req,res, next) => {
const authHeader = req.headers.token
if(authHeader) {
const token = authHeader.split(" ")[1];
jwt.verify(token, process.env.JWT_SEC, (err, user)=>{
if(err) res.status(403).json("token is not valid");
req.user = user;
next();
})
} else {
return res.status(401).json(" you are not authenticated");
}
};
const verifyTokenAndAuthorization = (req,res,next) => {
verifyToken(req,res,()=> {
if(req.user.id === req.params.id || req.user.isAdmin ) {
next();
} else {
res.status(403).json("you are not allowed to do that");
}
});
};
const verifyTokenAndAdmin = (req,res,next) => {
verifyToken(req,res,()=> {
if( req.user.isAdmin) {
next();
} else {
res.status(403).json("your are not the admin ");
}
});
};
module.exports = {verifyToken, verifyTokenAndAuthorization, verifyTokenAndAdmin};
- this is route file named user.js*
const User = require("../models/User")
const { verifyToken, verifyTokenAndAuthorization, verifyTokenAndAdmin} = require("./verifyToken");
const router = require("express").Router();
// UPDATE
router.put("/:id", verifyTokenAndAuthorization, async (req, res)=>{
if(req.body.password) {
req.body.password = CryptoJS.AES.encrypt(
req.body.password,
process.env.PASS_SEC
).toString();
}
try {
const updatedUser = await User.findByIdAndUpdate(req.params.id, {
$set: req.body
}, {new: true}
);
res.status(200).json(updatedUser);
}catch (err) {
res.status(500).json(err);
}
});
//DELETE
router.delete("/:id", verifyTokenAndAuthorization, async (req,res)=>{
try {
await User.findByIdAndDelete(req.params.id)
res.status(200).json("user has been deleted");
}catch(err){
res.status(500).json(err)
}
})
//GET USER
router.get("/find/:id", verifyTokenAndAdmin, async (req,res)=>{
try {
const user = await User.findById(req.params.id);
const { password, ...others } = user._doc;
res.status(200).json(others);
}catch(err){
res.status(500).json(err)
}
})
module.exports = router;