用session的方式不好实现跨域的权限验证。token保存在客户端,服务端只做token的签发和token的验证,所以jsonwebtoken可以实现跨域的权限验证。
在nodejs项目中封装一个使用jsonwebtoken进行token签发和token验证的模块。
// 导入jsonwebtoken
const jwt = require('jsonwebtoken')
// 本地的密钥,随便定义
const PRIVATEKET = 'huangweizhi'
// token过期时间
const TIME = 60*60*6
// 生成token
exports.sign = (req) => {
// 要生成token的主题信息
let content = {username: req.body.username}
// 加密的key(密钥)
let privateKey = PRIVATEKET
let token = jwt.sign(content, privateKey, {
// 过期时间(秒)
expiresIn: TIME
})
return token
}
// 验证token
exports.verify = (token) => {
return new Promise((resolve, reject) => {
// 加密的key(密钥)
let privateKey = PRIVATEKET
jwt.verify(token, privateKey, (err, decode) => {
if (err) {
// 验证不通过(token过期或错误)
resolve(false)
} else {
// 验证通过,decode包含主题信息、token过期时间
resolve(decode)
}
})
})
}