节点会议处理器
模块提供了处理公司众议院会议的方式.
模块提供以下文物:
Session反映会议结构,包括 " 单一标志 " 的要素SessionStore负责从 / 到数据库读取和写入会话数据, 负责数据编码/ 解码SessionMiddleware以请求 cookie 为基础, 提供简单使用 express.js 中间软件读取会话
兼容的节点.js 版本
这个软件包已经升级,与Node v24兼容. 目前,它与v20和v18是相容的后向兼容,但相容性主要是v24的要求,因为所有的CH节点服务都在被升级到v24的过程中.
先决条件
模块要求 request.cookies 以 cookie 名称键入对象的地图。 通过使用 饼干派瑟 模块.
短期 npm install cookie-parser 命令以安装依赖性,并在应用程序中添加以下 snipt 来应用 cookie 剖析中间软件 :
import * as cookieParser from 'cookie-parser'
...
app.use(cookieParser())
注意: Cookie 解析必须在请求传递到会话中间软件之前进行.
怎样用
要将本模块作为依赖性,请将以下部分添加到 package.json数字 :
"@companieshouse/node-session-handler": "~4.1.0"
会议
会话课是围绕原始会话的包装 data: ISession (签字后从账户取出).
为了保持 ISession 类型一致,我们添加了一个额外的字段,叫做 extra_data (单位:千美元)SessionKey.ExtraData在会话中存储应用程序可能需要的任何数据,使会话本身可以扩展.
该类提供这些方法:
get<T = ISessionValue>(key: SessionKey): T | undefined- 允许检索在SessionKey代表所有可能类型但无法从会话中取回的enumgetExtraData<T>(key: string): T | undefined- 允许检索应用程序所覆盖的会话数据setExtraData<T>(key: string, val: T): void- 允许修改应用程序使用的会话数据,替换现有值(如果有的话)deleteExtraData(key: string): boolean- 从应用程序所覆盖的会话数据中删除密钥(如果存在)verify = (): void- 确保会话有效,即包含正确的字段,而且不会过期
会话
会话存储提供了加载方式 SessionStore.load存储 SessionStore.store 删除 SessionStore.delete 来自数据库的会话,而不担心数据编码或解码.
所有上述方法都以 Cookie 类,具有会话ID和签名的组合。 使用这种参数类型有助于确保只为已核实的会话标识符进行数据库操作.
会话中软件
会话中间软件为express.js应用程序提供了方便的集成点. 中间软件有:
- 从请求 HTTP 信头读取 cookie 值
- 如果 cookie 有的话, 验证 cookie 签名
- 如果存在的话, 使用已校验的 cookie 从存储中装入会话
- 请求范围内已核实的会话
- 如果会话数据改变, 则在请求结束时存储会话
Express.js希望引入会话处理的应用程序应当以下列方式注册中间软件: 1
const sessionStore = new SessionStore(new Redis(`redis://${process.env.CACHE_SERVER}`))
const middleware = SessionMiddleware({
cookieName: process.env.COOKIE_NAME,
cookieDomain: process.env.COOKIE_DOMAIN,
cookieSecureFlag: process.env.COOKIE_SECURE_ONLY,
cookieTimeToLiveInSeconds: process.env.DEFAULT_SESSION_EXPIRATION,
cookieSecret: process.env.COOKIE_SECRET
}, sessionStore)
app.use(middleware)
这样的程序就可以通过 request.session 只要我们.. __SID cookie 设定为校正值 .
还有一个选项是,在没有登录信息的情况下无法认证会话。 在这种情况下,只要请求中找不到有效的会话,中间软件就会产生空会话.
用于支持未认证的会话 true 作为中件厂函数的最后一个参数,例如:. SessionMiddleware(config, sessionStore, true)。 。 。 .
保证会议Cookie 中枢软件
方便快捷的中间软件功能,确保请求包含 如果不是会话 ID Cookie 并强制重定向 。 如果随后 中间软件需要 Cookie 出现在请求中 .
应当与 SessionMiddleware 并被安置在它的后面
在中间软件函数链中.
应采用下列方式:
// Create CookieConfig as required
const cookieConfig = { ... };
// Create sessionMiddleware using same cookie config, refer to previous section
// for explicit instructions
const sessionMiddleware = ...;
const ensureSessionCookiePresentMiddleware =
EnsureSessionCookiePresentMiddleware({
// Ensure use the same cookie name as session, spreading cookie config
// will accomplish this
...cookieConfig,
// Supply values for redirectHeaderName and redirectHeaderValue
// to customise the header which is used to validate the redirected
// request. (Defaults to name: `x-redirection-count` value: `1`)
redirectHeaderName: "not-redirect",
redirectHeaderValue: "not-true",
})
app.use(sessionMiddleware)
app.use(ensureSessionCookiePresentMiddleware)
发展
模块需要可以通过 npm install 命令.
定点测试
代码是用 ts-lint 可通过 npm run lint 命令.
测试可依次通过 npm test 命令.