Arpit Yadav
Arpit Yadav

Reputation: 545

How to call jwt verification function from routes?

verify_jwt_token

var jwt = require('jsonwebtoken');
var config = require('./env/config.json')

module.exports = function(req,res,next) {
  var token = req.body.token || req.query.token || req.headers['x-access-token'];
    if (token) {
        console.log("----------------------------------------");
        console.log(token);
        console.log("----------------------------------------");

        console.log(config.jwt_secret);
        console.log("----------------------------------------");

    // verifies secret and checks exp
        jwt.verify(token, config.jwt_secret, function(err, decoded) {
            if (err) { //failed verification.
                return res.json({"error": true});
            }
            req.decoded = decoded;
            next(); //no error, proceed
        });
    } else {
        // forbidden without token
        return res.status(403).send({
            "error": true
        });
    }
}

Routes

 var user  = require('../controller/user.controller.js');
 var token_verify = require('../../config/verify_jwt_token.js')

module.exports = function (app) {

app.route('/register_user').post(user.register);
app.route('/login').get(user.login);


app.route('/auth',token_verify).get(user.auth);


}

I want to call j w t verification function from this route.I don't want to call from the controller. app.route('/auth',token_verify).get(user.auth); Calling from this route Please help. Thank you in advance.

Upvotes: 1

Views: 1753

Answers (1)

Cisco
Cisco

Reputation: 22952

This will work-ish:

const express = require('express')
const app = express()

function jwtVerify (req, res, next) {
  console.log('verifying token...')
  // logic
  next()
}

app
  .use(jwtVerify)
  .route('/example')
  .get((req, res) => res.json({ hello: 'World' }))

app.listen(3000)

The issue you will run into is that the middleware will execute for every route you define because the middleware is applied to the app instance. To fix this, you need to make use of the Router. Quick dirty example below:

app.js

const express = require('express')
const app = express()
const securedRoutes = require('./secured-routes')

function jwtVerify (req, res, next) {
  console.log('verifying token...')
  // logic
  next()
}

app.use('/secured', jwtVerify, securedRoutes)

app.listen(3000)

secured-routes.js

const express = require('express')
const router = express.Router()

router.get('/', (req, res) => res.json({ message: 'Hello from secured routes' }))

module.exports = router

Upvotes: 2

Related Questions