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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM