关于node.js:express生成token

4次阅读

共计 2073 个字符,预计需要花费 6 分钟才能阅读完成。

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. 本期的分享到了这里就完结啦, 心愿对你有所帮忙, 让咱们一起致力走向巅峰。

正文完
 0