express生成token

灰太狼的情与殇

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.效果图如下:
image.png
8-1.在这里分享一下可以解析token的网站:

https://jwt.io/

8-2.效果如下:
image.png

9.本期的分享到了这里就结束啦,希望对你有所帮助,让我们一起努力走向巅峰。

阅读 1.1k

吾不是什么大佬,在这个领域我从未想赢,只是不甘认输。生活再平凡,也是限量版,让我们走出不一样的人生,活...

112 声望
5 粉丝
0 条评论
你知道吗?

吾不是什么大佬,在这个领域我从未想赢,只是不甘认输。生活再平凡,也是限量版,让我们走出不一样的人生,活...

112 声望
5 粉丝
宣传栏