zoukankan      html  css  js  c++  java
  • 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 ",就成功了!!

  • 相关阅读:
    multipart/form-data
    Java面试之SE基础基本数据类型
    数据库中的悲观锁和乐观锁详解
    j2SE基回顾(一)
    Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
    消防(bzoj 2282)
    YY的GCD(bzoj 2820)
    Problem b(bzoj 2301)
    完全平方数(bzoj 2440)
    The Luckiest number(hdu 2462)
  • 原文地址:https://www.cnblogs.com/blog-zy/p/11840964.html
Copyright © 2011-2022 走看看