导入模块
在cmd中输入以下命令,安装jsw模块
npm install jsonwebtoken
在js文件中引用
var jwt = require("jsonwebtoken");
生成Token
var content ={msg:"today is a good day"}; // 要生成token的主题信息
var secretOrPrivateKey="I am a goog man!" // 这是加密的key(密钥)
var token = jwt.sign(content, secretOrPrivateKey, {
expiresIn: 60*60*24 // 24小时过期
});
console.log("token :" +token );
校验Token
var token = rq.body.token || rq.query.token || rq.headers["x-access-token"]; // 从body或query或者header中获取token
jwt.verify(token, secretOrPrivateKey, function (err, decode) {
if (err) { // 时间失效的时候/ 伪造的token
rs.json({err:err})
} else {
rq.decode = decode;
console.log(decode.msg); // today is a good day
next();
}
})
注意事项
1- 设置token过期时间
如果你使用expiresInMinutes来设置token的过期时间,很抱歉它会抛出如下异常
ValidationError: "expiresInMinutes" is not allowed
请使用expiresIn:以秒为单位或描述的时间跨度字符串表示rauchg / MS。如:60,“2 days”,“10h”,“7d”
{expiresIn: 60} // 有效期60秒(没有时间单位以秒为准)
{expiresIn: "2 days"} // 有效期 2天 (后缀为时间单位)下面的类似
......
('1d') // 86400000
('10h') // 36000000
('2.5 hrs') // 9000000
('2h') // 7200000
('1m') // 60000
('5s') // 5000
('1y') // 31557600000
2 - verify时返回的err的值
"err": {
"name": "TokenExpiredError",
"message": "jwt expired", // token过了有效期
"expiredAt": "2016-11-07T03:31:25.000Z"
}
"err": {
"name": "JsonWebTokenError",
"message": "invalid token" // 伪造/无效的token
}