在路由子集上激活的 Express.js 会话

2023-11-30

我正在使用expressjs,并希望使用会话对用户登录进行身份验证。站点/应用程序一方面应允许用户在无状态网页中浏览和调查不同的产品和信息,从而允许缓存这些页面,但另一方面应具有让用户登录和访问使用会话获取的不同内容的功能。

因此,对于我的路线的子集,我希望激活会话状态,而对于补充子集(我的路线的其余部分),应停用快速会话,从而允许缓存这些页面。

我怎样才能以干净的方式做到这一点?

假设我要激活会话的路由是“/kj%C3%B8p”、“/bibliotek”和“/register”。

我尝试过类似的东西

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  var pageName = 'somepage';
  var oneYear = 1000*60*60*24*365;
  app.use(express.bodyParser());
  app.use('/kj%C3%B8p', express.cookieParser());
  app.use('/kj%C3%B8p', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}}));
  app.use('/bibliotek', express.cookieParser());
  app.use('/bibliotek', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path: '/', maxAge: (5*oneYear), httpOnly: true}}));
  app.use('/registrer', express.cookieParser());
  app.use('/registrer', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}}));

  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));

});

但这会为三个路由中的每一个重新生成会话对象,并且看起来很混乱。有小费吗?


您可以将中间件包装在函数中以将某些 URL 列入黑名单或白名单。这是一个白名单示例:

function allow(paths, fn) {
  return function(req, res, next) {
    if (~paths.indexOf(req.url)) {
      return fn(req, res, next);
    }
    next();
  }
}

您可以将其包裹在中间件中,如下所示:

app.use(allow(['/bibliotek', '/registrer'], express.cookieParser()));

您也可以对其他中间件使用相同的技术。这是基于一个gist明文作者在 irc 中显示的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在路由子集上激活的 Express.js 会话 的相关文章

随机推荐

  • 如何从 OpenLayers.Control.DrawFeature 获取积分返回

  • Jquery CSS 和 JS 限制元素 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我想将 Jquery 移动 CSS 和 JS 仅应用于某些有限的元素 而不应用于页面上的其他元素 知道我该怎么做吗 我有一些 Salesforce 标准客户门户 其中包含一个包含 Jq
  • 如何在 Perl 6 中向我的自定义类添加下标?

    我是 Perl 6 的新手 我的 Atom 编辑器中有以下代码 但我仍然不明白它是如何工作的 我复制了以下代码 作为docs raku org说了 不过好像不行 所以我将代码更改为 use v6 class HTTPHeader class
  • 无法返回 cellForRowAtIndexPath 中的单元格

    我试图在 tableView 中返回不同的单元格 通常在这种情况下 我会返回不同的单元格 然后在底部返回 nil 但在这种情况下 它会给我带来错误 我也尝试过返回一个空单元格 但也给了我错误 我尝试过的 return nil and var
  • 如何测试网络管道服务是否正在监听

    如何以编程方式测试以查看特定的网络管道服务是否正在运行和侦听 这样我就不会收到 没有端点正在侦听 异常 例如 如果我有这个代码 Uri baseAddress new Uri http localhost something var Ser
  • 在画布上绘图时的偏移

    有一个简单的绘图应用程序 问题出在坐标 redraw函数 它们必须是鼠标 但接近 2x 鼠标 代码中有什么问题
  • mysqli 使用 p: connect 选项打开多个新进程

    这是我第一次在这里提问 我搜索了 Google stackoverflow 等 寻求帮助解决我遇到的问题 我们目前使用 PHP 5 3 10 和 MySQL 5 0 95 以及 Apache 2 2 21 CentOS 我们正在开始从旧的
  • 云中的 Elastic Search 集群

    我有 2 个 Linux VM 均位于云提供商的同一数据中心 Elastic1 和 Elastic2 其中 Elastic 2 是 Elastic 1 的克隆 两者都有相同的 centos 版本 相同的集群名称和相同的 ES 版本 Elas
  • 在R中绘制椭圆/双曲线

    我想在R中画椭圆 双曲线 我该如何使用 ggplot2 来做到这一点 让我举个例子 x 2 3xy 4x 2y 2y 2 0 for x between 2 and 2 y between 2 and 2 构造数据字段 d lt trans
  • 提供者与Oracle客户端版本不兼容

    我正在尝试使用Oracle ODP NET 11g 11 1 0 6 20 即时客户端在我的 ASP net 项目中数据提供者但是当我运行 aspx 页面时 我得到一个 提供者与Oracle客户端版本不兼容 错误消息 任何帮助将不胜感激 我
  • 由于放弃的提交而导致 Git 合并挂起

    我有两个提交 提交 B 依赖于提交 A 提交 A 被放弃 现在我在合并 B 时遇到错误 它说已提交 由于 B 对 A 的依赖而合并待处理 我用谷歌搜索过但找不到确切的答案 我需要一步一步的解决方案 因为我是 git 的新手 并且很难理解如何
  • 将 Dagger 与 java 11 和 Maven 一起使用

    Google Dagger DIF 是否适用于 java 11 如果不是 鉴于不可能将项目更改为使用 java 8 那么替代方案是什么 是的 可以将 dagger 2 32 与 maven 和 java 11 一起使用 我遇到了编译过程和
  • SQL 格式时间对象从 24 小时到 12 点

    有没有办法在 SQL 中将时间对象转换为 12 小时格式 我不能使用日期时间 因为检索的数据不是特定于日期的 16 45 00 gt 下午 4 45 尝试使用这个 DECLARE aux NVARCHAR 8 16 45 00 SELECT
  • 可能的空引用返回c# linq

    我有这个 linq 查询 它抱怨警告消息 警告 CS8603 可能返回空引用 Code return await applicationDbContext Pies Include x gt x Portions AsSingleQuery
  • Secrets 模块如何在 Python 中生成完美的随机序列

    现在我对数学有了相当的了解 并且我知道可以使用特定的数学算法创建伪随机序列 我还知道在Python中有一个secrets显然可以产生随机数的模块 我尝试对其进行一些调整 但我仍然不明白它应该如何工作 我们来说一下这段代码 import se
  • 使用 lodash 重塑 JSON 并减少

    我想根据从 URL 下载的已解析 CSV 文件重塑 JSON 我使用 csvtojson 模块来解析 CSV 并创建需要重新整形的 JSON 下面是我的完整代码 const require lodash to handle datetime
  • 在 Tkinter 中使用按钮调用函数后返回值

    from Tkinter import from tkFileDialog import askopenfilename from PIL import Image def main filename askopenfilename fil
  • 查找与给定数字最接近的数字之和

    假设我有一个列表 1 2 3 4 5 6 7 我想找到最接近给定数字的数字之和 抱歉 这个解释很糟糕 但这里有一个例子 假设我有一个列表 1 2 3 4 5 6 7 我想找到最接近 10 的数字 那么该方法应该返回 6 和 4 或 7 和
  • 我们如何在 Android 上的 HttpClient 4.4+ 中启用 SNI?

    我正在尝试制定在现代版本的 Android 上将 SNI 与主要 HTTP 堆栈结合使用的方法 这包括 Apache 的单独 HttpClient 库 not该版本嵌入到 Android 本身中 但 Android 已经死亡并消失了 最新版
  • 在路由子集上激活的 Express.js 会话

    我正在使用expressjs 并希望使用会话对用户登录进行身份验证 站点 应用程序一方面应允许用户在无状态网页中浏览和调查不同的产品和信息 从而允许缓存这些页面 但另一方面应具有让用户登录和访问使用会话获取的不同内容的功能 因此 对于我的路