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');
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 vertoken = require('../public/token')
/* GET users listing. */
router.get('/', function (req, res, next) {
var Ctok = "";
vertoken.setToken("张三").then((data) => {
let CObj = {
code: "申请胜利啦",
CHtoken: data
}
res.json(CObj);
});
module.exports = router;
8. 效果图如下:
8-1. 在这里分享一下能够解析 token 的网站:
https://jwt.io/
8-2. 成果如下:
9. 本期的分享到了这里就完结啦, 心愿对你有所帮忙, 让咱们一起致力走向巅峰。