node 第十八天 中间件express-session实现会话密钥

  1. express-session 文档

    express-session 一个简单的express会话中间件

  2. 使用场景
    在一个系统中, 需要维持一个临时的与登录态无关的会话密钥

    比如登录系统后, 请求某一个接口, 接口的行为与登录态无关, 也就是说任何人对接口的访问都是一样的,服务端不关心客户端是谁, 但是为了服务特定用户(比如能够登录该系统的用户),又必须有一个密钥来做验证,请求密钥时验证用户的登录状态,验证成功, 则发送密钥。 用户拿到密钥后就可以和服务端通信, 而通信过程不需要带上用户信息, 服务端也不会关心用户信息。

  3. 使用
    node

    js 复制代码
    const session = require('express-session');
    app.use(
      session({
        secret: 'myscret',
        resave: false,
        saveUninitialized: true,
        name: 'token'
      })
    );
    //服务端设置会话密钥,发送给客户端加密后的密钥
    //虽然接口叫做login其实和登录没有联系
    router.post('/login', (req, res, next) => {
      req.session.token = '10086';
      res.send(200, {
        msg: 'ok'
      });
    });
    //需要会话密钥验证的接口
    router.post('/request', (req, res, next) => {
      console.log(req.session);
      if (req.session.token && req.session.token === '10086') {
        res.send(200, {
          msg: 'get'
        });
        return;
      }
      res.send(200, {
        msg: 'error reject'
      });
    });
    //服务端销毁会话密钥
    router.post('/logout', (req, res, next) => {
      req.session.destroy(() => {
        res.send({
          msg: 'logout'
        });
      });
    });
  4. 其实这种场景比较少, 大多数的场景还是需要对用户的状态做出区分, 而且关联上用户状态也是可以涵盖这种场景的

  5. 使用注意, 如果前后端跨域 【注释一】 你需要注意, 跨域如何设置cookie(如果你读过文档, 你会知道这个中间件是基于cookie实现的)已经在node第十一天说过。

    这是mdn的文档描述, 但是你无法在本地跨域的情况下使用使用这个中间件, 因为此中间件对于跨域设置cookie会忽略掉,即使是 locahost 。从规范的角度来说这里应该是这个中间件的不足之处

  6. 【注释一】 这里的跨域准确来说应该是至少域名/ip存在不同 ,而不能仅仅是端口号不同

  7. 这种会话模式显然是将凭证维护在服务端, 与之对应的还有另外一种方式, 也就是现在被广泛运用的token,把凭证维护在客户端。详见node 第十九天

相关推荐
亮子AI19 小时前
【NestJS】在 nest.js 项目中,如何使用 Postgresql 来做缓存?
开发语言·缓存·node.js·nest.js
EndingCoder19 小时前
Node.js 数据查询优化技巧
服务器·javascript·数据库·node.js·数据查询优化
芒果Cake19 小时前
【Node.js】Node.js 模块系统
javascript·node.js
_光光21 小时前
大文件上传服务实现(后端篇)
后端·node.js·express
一枚前端小能手21 小时前
🚀 Node.js 25重磅发布!快来看看吧
前端·javascript·node.js
impossible199472721 小时前
如何开发一个自己的包并发布到npm
node.js·1024程序员节
shaominjin1231 天前
OpenCV 4.1.2 SDK 静态库作用与功能详解
android·c++·人工智能·opencv·计算机视觉·中间件
岁月宁静2 天前
用 Node.js 封装豆包语音识别AI模型接口:双向实时流式传输音频和文本
前端·人工智能·node.js
徐sir(徐慧阳)2 天前
搭建属于自己的网站HEXO静态页(二)发布网站到gihub
服务器·node.js·github·hexo
雪中何以赠君别2 天前
【框架】CLI 工具笔记
javascript·node.js