title: authentication with jsonwebtokens in node.js
body: <p>i am using jsonwebtoken for generating JSON webtokens for authenticating users, i am done with generating tokens but whenever i send token to the server it doesnot get verified it always end with <strong>TypeError: jwt.verify is not a function</strong> someone please help on this how to verify token,</p>
  
  <pre><code>var express = require('express');
  var app = express();
   var bodyParser = require('body-parser');
  var morgan = require('morgan');
  var mongoose = require('mongoose');
  var moment = require('moment');
  
   var jwt = require('jwt-simple'); // used to create, sign, and verify tokens
  var config = require('./config'); // get our config file
  var User = require('./models/users'); // get our mongoose model
  
  
   var port = process.env.PORT || 8080; // used to create, sign, and verify    tokens
   mongoose.connect(config.database); // connect to database
  app.set('superSecret', config.secret); // secret variable
  
   // use body parser so we can get info from POST and/or URL parameters
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(bodyParser.json());
  
  // use morgan to log requests to the console
  app.use(morgan('dev'));
  
  
   var router = express.Router();
  router.post('/authenticate', function(req, res, next) {
  console.log(req.body.name);
  User.findOne({ name: req.body.name }, function(err, user) {
      if (err) {
          throw err;
      }
      if (!user) {
          res.json({ success: false, message: 'Authentication failed. User not found.' });
      } else if (user) {
          if (user.password != req.body.password) {
              res.json({ success: false, message: 'Authentication failed. Wrong password.' });
          } else {
               // now create token here
              var token = jwt.sign(user,app.get('superSecret'),{
                  expiresIn:1440 
              });
  
              res.json({
                  success: true,
                  message: 'Enjoy your token!',
                  token: token
              });
          }
      }
  })
  })
  //decoding jwt
    router.use(function(req, res, next) {
  
     // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access- token'];
  
    // decode token
     if (token) {
  
     // verifies secret and checks exp
     var decode =  jwt.verify(token, "jsonWebTokens", function(err, decoded) {      
        if (err) {
           return res.json({ success: false, message: 'Failed to authenticate token.' });    
        } else {
          // if everything is good, save to request for use in other routes
         req.decoded = decoded;    
        next();
       }
      });
  
    } else {
  
      // if there is no token
    // return an error
    return res.status(403).send({ 
      success: false, 
      message: 'No token provided.' 
    });
  
    }
     });
  
   router.get('/', function(req, res, next) {
      res.send("hello and welcome to express routing");
   })
  
  router.get('/users', function(req, res, next) {
      User.find({}, function(err, users) {
          res.json(users);
  
     // decode token
  
      })
       })
  
   app.use('/api', router);
   // basic route
   app.get('/', function(req, res) {
       res.send('Hello! The API is at http://localhost:' + port + '/api');
       });
  
   //for users
   app.get('/setup', function(req, res) {
  
      // create a sample user
      var nick = new User({
      name: 'Nick Cerminara',
      password: 'password',
      admin: true
      });
  
      // save the sample user
      nick.save(function(err) {
        if (err) throw err;
  
        console.log('User saved successfully');
        res.json({ success: true });
    });
   });
  
  app.listen(port);
  console.log('Magic happens at http://localhost:' + port);
  </code></pre>
  
  <p>i followed this tutorial <a href="https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens#authenticating-and-creating-a-token" rel="nofollow">https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens#authenticating-and-creating-a-token</a></p>