如何在节点JS中实现JWT验证令牌

时间:2019-04-25 08:26:05

标签: node.js nodejs-stream nodejs-server

我试图在节点js中实现jwt令牌生成。我获得了jwt令牌,但是如何使用节点js crud操作来验证令牌。但是我使用回调函数获得了令牌jwt验证代码。没有用于实现异步/主动的回调函数功能实现。

index.js

router.post('/', async (req, res) => {
    (async function() {
        try {
          await client.connect();
          console.log("Connected correctly to server");
          const db = client.db('olc_prod_db');

          //Validation
          const { error } = validate.validate(req.body);
          if (error)
          {
            return res.status(400).send(error.details[0].message);
          }
          else
          {
            const check_login = req.body
            const r = await db.collection('UserRegistration').find().toArray();
            r.forEach(element => {
                if(element['username'] == check_login['username'])
                {
                    const token = get_token.validate(req.body)
                    res.send({"token ":token})
                }
                else 
                {
                    return res.send(401,"Un Authorized");
                }
            });

          }
          client.close();
        } catch(err) {
          console.log(err.stack);
        }
      })();

  });

authtoken.js

var jwt = require('jsonwebtoken')
function get_token(userdata)
{

    var accessToken = jwt.sign(userdata, 'secretkey', {
        //Set the expiration
        expiresIn: 3600 //we are setting the expiration time of 1 hr. 
    });
    //send the response to the caller with the accesstoken and data
    console.log('Authentication is done successfully.....');
    return accessToken

}





exports.validate = get_token;

2 个答案:

答案 0 :(得分:1)

const jwt  = require('jsonwebtoken')
const config = require('../../config/default')

function verifyjwt(req,res,next){
    const token = req.headers['authorization']
    if(!token) return res.status(401).json('Unauthorize user')

   try{
        const decoded = jwt.verify(token,config.secret);
        req.user = decoded
        next()

   }catch(e){
    res.status(400).json('Token not valid')
   }
}

module.exports = verifyjwt

答案 1 :(得分:0)

const CONST = require('../../config')
exports.validJWTNeeded = (req, res, next) => {
    if (req.headers['authorization']) {
        try {
            let authorization = req.headers['authorization'].split(' ');
            if (authorization[0] !== 'Bearer') {
                return res.status(401).send('invalid request'); //invalid request
            } else {
                req.jwt = jwt.verify(authorization[1], CONST.SECRET);
                return next();
            }
        } catch (err) {
            return res.status(403).send(); //invalid token
        }
    } else {
        return res.status(401).send('invalid request');
    }
}