jsonwebtoken和express-jwt的使用

Posted 神经质少女爱代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsonwebtoken和express-jwt的使用相关的知识,希望对你有一定的参考价值。

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 ",就成功了!!

以上是关于jsonwebtoken和express-jwt的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 angular2 设置 express-jwt 而不阻塞 node_modules?

在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由

NodeJS(Express框架)实现 Token 验证免密登录 (一)

res.redirect 时未找到授权令牌

使用 angular 和 express-jwt 实现刷新令牌

express-jwt 和带有 cookie 的 Angular 9:未在“授权”标头中设置令牌