auth0-blog / nodejs-jwt-authentication-sample

A NodeJS API that supports username and password authentication with JWTs
MIT License
688 stars 267 forks source link

How to exclude a route from jwt token verification #33

Open ashrafkm opened 6 years ago

ashrafkm commented 6 years ago

How to exclude a route from jwt token verification

router.use((req, res, next) => {
const r = req;
// check header or url parameters or post parameters for token
// const token = req.body.token || req.query.token || req.headers['x-access-token'];
const token = req.body.token || req.query.token || req.headers.authorization;
// decode token
if (token) {
    // verifies secret and checks exp
    jwt.verify(token, req.app.get('superSecret'), (err, decoded) => {
        if (err) {
            // res.json({ success: false, message: 'Failed to authenticate token.' });
            return res.status(401).send({
                success: false,
                message: 'Failed to authenticate token.'
            });
        } else {
            // if everything is good, save to request for use in other routes
            r.decoded = decoded;
            next();
            // console.log(decoded);
        }
        // return {};
    });
} else {
    // if there is no token
    // return an error
    return res.status(403).send({
        success: false,
        message: 'No token provided.'
    });
}
});

In this I want to exclude some router from token verification (ex: user registration route). How can I do that. I have tried putting that route above jwt.verfication code but still it is not working

codestaintin commented 6 years ago

Declare the routes you want to exclude before the function const excluded = ['/login', '/users']; then do this before requesting your token if (excluded.indexOf(req.url) > -1) return next();

It should work