1.开发环境vue+node
2.电脑系统 windows10专业版
3.在使用vue+node开发的过程中,在写登录时候我们会使用到token验证,下面我来分享一下express生成token和简单的使用,希望对你有所帮助。
4.安装 jsonwebtoken
npm install express-jwt
npm install jsonwebtoken --save
4-1.express-jwt和jsonwebtoken是什么?
express-jwt内部引用了jsonwebtoken,对其封装使用。在实际的项目中这两个都需要引用,他们两个的定位不一样。jsonwebtoken是用来生成token给客户端的,express-jwt是用来验证token的。
5.在express项目中,在public文件夹下新建token.js文件,添加如下代码:
//用于生成和解析token
var jwt = require('jsonwebtoken');
var signkey = 'mes_qdhd_mobile_xhykjyxgs';
exports.setToken = function (username, userid) {
return new Promise((resolve, reject) => {
const token = jwt.sign({
name: username
}, signkey, { expiresIn: '1h' });
resolve(token);
})
}
exports.verToken = function (token) {
return new Promise((resolve, reject) => {
var info = jwt.verify(token.split(' ')[1], signkey);
resolve(info);
})
}
6.在app.js中进行配置:
var vertoken = require('./public/token');
var expressJWT = require('express-jwt');
app.use(function (req, res, next) {
var token = req.headers['authorization'];
if (token == undefined) {
return next();
} else {
vertoken.verToken(token).then((data) => {
req.data = data;
return next();
}).catch((error) => {
return next();
})
}
next(createError(404));
});
app.use(expressJWT({
secret: 'mes_qdhd_mobile_xhykjyxgs',
algorithms: ["HS256"]
}).unless({
path: ['/index']//除了这个地址,其他的URL都需要验证
}));
请注意:使用 jwt 可能会报错:algorithms should be set;
解决方法:在app.use(expressJWT) 这个配置中添加 algorithms: ["HS256"];
报错原因:2020.7.7日jwt更新之后,安装的express-jwt模块会默认为6.0.0版本,更新后的jwt需要在配置中加入algorithms属性,即设置jwt的算法。一般HS256为配置algorithms的默认值:
app.use(function (err, req, res, next) {
// set locals, only providing error in development
if (err.status == 401) {
return res.status(401).send('token失效');
}
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
// res.render('error');
});
7.在接口中使用:
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var Ctoken = require('../public/token');
/* GET users listing. */
router.get('/', function (req, res, next) {
var Ctok = "";
Ctoken.setToken("张三").then((data) => {
let CObj = {
code: "我是登录接口",
msg: "请求成功",
CHtoken: data
}
res.json(CObj);
});
})
module.exports = router;
8.效果图如下:
8-1.在这里分享一下可以解析token的网站:
https://jwt.io/
8-2.效果如下:
9.本期的分享到了这里就结束啦,希望对你有所帮助,让我们一起努力走向巅峰。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。