Reputation: 23
Hi people I have been using NodeJS for some project and I have been using some middleware to verify my token and decrypt my token to get the permissions of user.
router.post('/addrole', verifyTokenUser, (req, res) => {
try {
const userUtilsObj = new userUtils();
if (userUtilsObj.checkPermissions(req.body.permission_set, 'Admin Web User', 'Create')) {
} else {
}
} catch (e) {
console.log(e);
}
});
My Middleware Function:
function verifyToken(req, res, next) {
var token = req.headers['x-access-token'];
if (!token)
return res.status(403).send({ status: false, message: 'You are not authorized to access the data, please login again' });
else {
if (jwt.verify(token, 'niruthi')) {
var decoded = jwtDecode(token);
pool.query("select uid from users where uid='" + decoded.id + "' and is_active='1'", function (error, rows) {
if (error) {
return res.send({ status: false, login: false, message: error });
}
else if (rows.length > 0) {
req.body.userId = decoded.userId;
req.body.userType = decoded.userType;
req.body.permission_set = decoded.permission_set;
}
else {
return res.send({ status: false, login: false, message: "User Account is InActive" });
}
});
} else {
return res.status(401).send({ status: false, login: false, message: 'Login expired, please login again' })
}
}
next();
}
You can check in my middleware function that I am returning some permission_set using req.body.permission_set and returning it for checkPermissions but its invoking checkPermissions without the part of decryption is done. So how to make it wait for verifyTokenUser Middleware.
Upvotes: 0
Views: 36
Reputation: 30975
You don't code the next()
when the job is done, try with this :
function verifyToken(req, res, next) {
var token = req.headers['x-access-token'];
if (!token)
return res.status(403).send({ status: false, message: 'You are not authorized to access the data, please login again' });
else {
if (jwt.verify(token, 'niruthi')) {
var decoded = jwtDecode(token);
pool.query("select uid from users where uid='" + decoded.id + "' and is_active='1'", function (error, rows) {
if (error) {
return res.send({ status: false, login: false, message: error });
}
else if (rows.length > 0) {
req.body.userId = decoded.userId;
req.body.userType = decoded.userType;
req.body.permission_set = decoded.permission_set;
next(); //<---- HERE
}
else {
return res.send({ status: false, login: false, message: "User Account is InActive" });
}
});
} else {
return res.status(401).send({ status: false, login: false, message: 'Login expired, please login again' })
}
}
}
Upvotes: 1