1.开发环境vue+node
2.电脑系统 windows10专业版
3.在应用vue+node开发的过程中,在写登录时候咱们会应用到token验证,上面我来分享一下express生成token和简略的应用,心愿对你有所帮忙。
4.装置 jsonwebtoken
npm install express-jwtnpm install jsonwebtoken --save
4-1.express-jwt和jsonwebtoken是什么?
express-jwt外部援用了jsonwebtoken,对其封装应用。在理论的我的项目中这两个都须要援用,他们两个的定位不一样。jsonwebtoken是用来生成token给客户端的,express-jwt是用来验证token的。
5.在express我的项目中,在public文件夹下新建token.js文件,增加如下代码:
//用于生成和解析tokenvar 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.本期的分享到了这里就完结啦,心愿对你有所帮忙,让咱们一起致力走向巅峰。