Invoke function only after middleware is done with its task

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

Answers (1)

BENARD Patrick
BENARD Patrick

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

Related Questions