express学习笔记:通过session实现用户登录和权限验证

​ 本文介绍如何在[express]中通过使用express-session中间件实现session存储和读取用户登录信息。

1、安装express-[session]中间件

通过以下命令安装express-session中间件

npm i express-session

2、引用express-session

在express中通过require引入express-session中间件,然后通过use使用express-session中间件并设置默认参数。

const express = require('express');
const session = require('express-session');
 
app = express();
 
app.use(session({
  secret: 'fse',
  resave: false,
  saveUninitialized: true,
}))

3、保存用户登录信息到session

在用户登录接口中,如果用户登录成功,则将用户信息保存到req.session属性中,只有引用了express-session中间件后,req中才会有session属性。

// 登录
app.post('/user/login', (req, res) => {
  // console.log('req', req);
  if(req.body.userName === 'admin' && req.body.password === '111111'){
    req.session.user = req.body;
    req.session.isLogin = true;
    res.send({
      status: 0,
      msg: '登录成功',
    })
  } else {
    res.send({
      status: 1,
      msg: '登录失败',
    })
  }
})

4、获取用户登录信息

通过判断session中是否保存有用户登录信息,如果有则返回登录信息,否则提示请先登录。

// 获取登录名
app.get('/user/userName', (req, res) => {
  if(!req.session?.isLogin){
    res.send({
      status: 1,
      msg: '请先登录',
    })
  } else{
    res.send(req.session.user.userName);
  }
})

5、用户退出登录

用户退出登录时,通过调用session的destroy方法销毁session信息。req.session中的数据将被清空。

// 退出登录
app.post('/user/loginOut', (req, res) => {
  req.session.destroy();
  res.send({
    status: 0,
    msg: '退出登录成功',
  })
})

6、完整的代码示例

const { urlencoded } = require('body-parser');
const express = require('express');
const session = require('express-session');
 
app = express();
 
app.use(session({
  secret: 'fse',
  resave: false,
  saveUninitialized: true,
}))
 
app.use(urlencoded({ extended:false }));
 
// 登录
app.post('/user/login', (req, res) => {
  // console.log('req', req);
  if(req.body.userName === 'admin' && req.body.password === '111111'){
    req.session.user = req.body;
    req.session.isLogin = true;
    res.send({
      status: 0,
      msg: '登录成功',
    })
  } else {
    res.send({
      status: 1,
      msg: '登录失败',
    })
  }
})
 
// 获取登录名
app.get('/user/userName', (req, res) => {
  if(!req.session?.isLogin){
    res.send({
      status: 1,
      msg: '请先登录',
    })
  } else{
    res.send(req.session.user.userName);
  }
})
 
// 退出登录
app.post('/user/loginOut', (req, res) => {
  req.session.destroy();
  res.send({
    status: 0,
    msg: '退出登录成功',
  })
})
 
app.listen(80, () => {
  console.log('http://127.0.0.1');
})

扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论