安装 express-jwt
npm i express-jwt
安装 jsonwebtoken
npm i jsonwebtoken
引入到某一个js文件中
const expressJwt = require('express-jwt')
const jwt = require('jsonwebtoken')
//引入自己设定的过期事件以及密钥
const {
PRIVATE_KEY,//钥匙
EXPIRESD //过期时间
} = require('./constants')
//加密
let token = jwt.sign({
username: 'heyifan',
type: '1',
age: '22',
school: 'zztl',
time: Date.now()
}, PRIVATE_KEY, {
expiresIn: EXPIRESD
})
console.log(token)
// 解密
jwt.verify(token, PRIVATE_KEY, (err, data) => {
if (err) console.log(err)
console.log(data)
})
封装成为验证以及解密的token 函数
const expressJwt = require('./node_modules/express-jwt')
const jwt = require('./node_modules/jsonwebtoken')
const {
PRIVATE_KEY,//钥匙
EXPIRESD //过期时间
} = require('./constants')
//加密
var setToken = (username, type, age, school) => {
let token = jwt.sign({
username,
type,
age,
school,
time: Date.now()
}, PRIVATE_KEY//钥匙, {
expiresIn: EXPIRESD//过期时间
})
return token
}
//解密
var verToken = (token) => {
return jwt.verify(token, PRIVATE_KEY, (err, data) => {
if (err) return 400
return data
})
}
//抛出两个函数
module.exports = {
verToken,
setToken
}
//白名单需求
app.js 部分代码
let no_router = ['/login', '/del_user', '/tests'] //声明白名单
app.use(async (req, res, next) => {
console.log(no_router.indexOf(req.url))
if (no_router.indexOf(req.url) != -1) {//说明此为白名单不需要验证 直接走下一个路由
// 在白名单中找到这个路由
next()
} else {
var token = req.headers['authorization'] //如果没有在白名单 则取其token
if (token == undefined) { //若token不存在 则返回登陆信息失效
res.send({
code: 4011,
msg: '登陆信息失效,请重新登录'
})
} else {
let jie = verToken(token)//存在 则 解析token 查询数据库 名字是否存在
try {
if(jie!=400){
let info = await test.findOne({
where: {
name: jie.name
}
})
if (info != '') { //存在 则 走下一个路由
next()
} else {//不存在 说明并无此用户信息
res.send({
code: 4012,
msg: '登陆信息失效,请重新登录'
})
}
}
} catch (error) {//报错
console.log(error.message)
res.send({
code: 4013,
msg: '登陆信息失效,请重新登录'
})
}
}
console.log("所有的请求都走了app.use这个中间件")
}
})
app.use(expressJWT({
secret: PRIVATE_KEY,
algorithms: ['HS256']
}).unless({
path: no_router //白名单 此路由白名单同上 依然不需要验证 是否过期
}));