**1.session **
安装 npm i express-session
// 引入express-session
const session = require('express-session')
然后app.use
// 使用session
app.use(session({
secret: 'testSecret',// 加密的字符串,里面的内容可以随便写
resave: false, // 强制保存session,即使它没变化
saveUninitialized: true, // 强制将未初始化的session存储, 默认为true
cookie: { maxAge: 1000 * 60}, // 过期时间 毫秒
}))
用户登陆成功后 把用户信息保存至 req.session.userInfo 里
let userInfo = { name : result[0]['name']}
req.session.userInfo = userInfo // 用户信息保存至 req.session.userInfo
res.send({
status: 200,
state: true,
msg: '登录成功',
result
})
后续校验是否登录的时候获取 req.session['userInfo'] 里面的值,如果是undefined则没有登录,如果里面存的是我们在登录的时候存的用户信息,则已经登录
// session
const interceptors = (req, res, next) => {
console.log(req.session['userInfo'],'===')
if(req.path === "/users/enter" || req.path === "/users/login") {
next()
} else {
if(req.session['userInfo']){
next()
} else {
res.send({status: 400, state: false, msg: "无效的验证信息 请重新登录"})
}
}
}
app.use('/', interceptors)
退出登录,销毁session req.session.destroy()
2.jsonwebtoken
安装 npm i jsonwebtoken
// 引入jsonwebtoken
const jwt = require('jsonwebtoken')
登录成功 生成token
let token = jwt.sign(payload, secret, { expiresIn: 60*5 }
通过res.send返给前端,前端请求时携带token信息 通过 jwt.verify() 验证token信息是否正确
// 使用token
// 拦截器过滤器,对于express来说,叫做中间件
const interceptors = (req, res, next) => {
let secret = 'test'
const token = req.body.token || req.query.token || req.headers['token'];
if(req.path === "/users/enter" || req.path === "/users/login") {
next()
} else {
console.log(token)
jwt.verify(token, secret, (err, decode) => {
if(err) {
res.send({status: 400, state: false, msg: "无效的验证信息"})
} else {
next()
}
})
}
}
app.use('/',interceptors)