jsonwebtoken和express-jwt的使用

杨飞
2023-12-01

jsonwebtoken和express-jwt——nodeJs下用户权限验证,token的生成与验证工具,踩坑记录~~~

使用步骤:

一、下载

npm install jsonwebtoken --save
npm install express-jwt --save

二、生成token和验证token

在user.js文件中

const jwt = require('jsonwebtoken');
//秘钥
var signkey = 'mes_qdhd_mobile';
//生成token
const setToken = function (username) {
    return new Promise((resolve, reject) => {
        const token = jwt.sign({
            username: username
        }, signkey, { expiresIn:  60 * 60 * 24 * 3 });
        // let info = jwt.verify(token.split(' ')[1], signkey)
        // console.log(info);
        console.log('token',token);
        resolve(token);
    })
}
//验证token
const verToken = function (token) {
    return new Promise((resolve, reject) => {
        var info = jwt.verify(token, signkey ,(error, decoded) => {
            if (error) {
              console.log(error.message)
              return
            }
            console.log(decoded)
          });
        resolve(info);
    })
}

 

三、获取解析token,判断是否有效

 

在app.js中

const jwt = require('jsonwebtoken');

var user = require('./user.js');

// 解析token获取用户信息
app.use(function(req, res, next) {
  var token = req.headers['authorization'];if(token == undefined){
        return next();
    }else{
     user.verToken(token).then((data)=> {
            req.data = data;
            return next();
        }).catch((error)=>{
          console.log(error);
            return next();
        })
    }
});

//验证token是否过期并规定哪些路由不用验证
app.use(expressJwt({
  secret: 'mes_qdhd_mobile'
}).unless({
  path: ['/', '/user/login']//除了这个地址,其他的URL都需要验证
}));

 

四、提示

 

// error handler
app.use(function (err, req, res, next) {
  console.log(err);
  if (err.name === 'UnauthorizedError') {
    console.error(req.path + ',无效token');
    res.json({
      message: 'token过期,请重新登录',
      code: 400
    })
    return
  }
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

 

睬坑记录:

一直在报format....Bearer [token]....

最后才发现,得到的token前面是有个Bearer的,在前端头部传递时,在token前加上"Bearer ",就成功了!!

另外一篇文件也推荐如下

https://blog.csdn.net/qq_27818541/article/details/76656784

 类似资料: