express开发服务端-----加解密token
参考: jsonwebtoken.
JWT 的原理
JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。
{
“姓名”: “张三”,
“角色”: “管理员”,
“到期时间”: “2018年7月1日0点0分”
}
以后,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。
服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。
加密
// 加密
const jwt = require('jsonwebtoken');
const token = jwt.sign({ id: data._id }, process.env.SECRET_KEY,{
expiresIn: 60*60, //过期时间,一个小时
});
解密
// 解密
const jwt = require('jsonwebtoken');
jwt.verify(token, process.env.SECRET_KEY, (error, authData) => {
assert(!error, 403, "token已过期");
const { id } = authData;
assert(id, 401, "请先登录");
require("../models/user").findById(id, (error, data) => {
req.user = data;
assert(req.user, 401, "请先登录");
next();
});
});
process.env.SECRET_KEY 需要配置全局环境变量