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 ",就成功了!!
另外一篇文件也推荐如下