session jsonwebtoken

116 阅读1分钟

**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)