在使用 Node.js 构建 Web 应用程序时,往往我们需要使用 Express.js 框架。而对于一些需要进行用户身份验证和会话管理的应用,我们就需要使用 Express中的 express-session
模块。这款模块已经是 Node.js社区中实现会话管理的事实标准了。
然而,express-session
自带的会话管理并不完整,需要开发者手动添加很多相关功能,例如清除过期的会话和踢出已登录用户等等。这些工作,可以利用 npm 包 express-session-helpers
解决。
简介
express-session-helpers
是一个轻量级的 npm 包,主要是为了帮助开发者更轻松地管理 Express 应用程序中的会话以及扩展 express-session
的功能。该包基于 Express 的 session
中间件实现,提供了以下功能:
- 销毁所有会话(例如在注销用户时需要使用)
- 销毁除当前正在使用的会话以外的所有会话(例如在管理员更新了应用程序设置后需要使用)
- 踢出某个或某些用户,或者踢出所有用户(为了使管理员能够实时地取消非法用户的访问)
- 生成有限期时间的会话,以避免会话“挂起”时间太长而变得无效
express-session-helpers
包已经在 GitHub 上开源,并在 npm 上发布。这些开源资源可以作为学习和指导的例子,以方便更好地使用这个重要的 npm 包。
安装和设置
在准备使用 express-session-helpers
前,需要先安装和设置 express-session
。具体操作见这里。
使用 express-session-helpers
包时,只需要安装该包即可:
npm i express-session-helpers
安装好后,我们就需要设置 express-session-helpers
。为此,需要在我们已有的 session
配置对象中添加一个名为 helpers
的对象。该对象本身包含一个名为 timeout
的属性(表示会话的存活时间),另外还包含四个方法:
destroyAll(session, callback)
:销毁所有会话destroyAllButCurrent(session, callback)
:销毁除当前正在使用的会话以外的所有会话destroyUser(session, userId, callback)
:踢出某个或某些用户,或者踢出所有用户createTimedSession(session, timeout, additionalData)
:生成有限期时间的会话
设置示例:
-- -------------------- ---- ------- ----- ------- - --------------------------- ----- -------------- - ----------------------------------- ----- ---- - - ------- --------- ----- ------- - ------- ---- -- ------- ----- ------------------ ----- -------- - -- ------ ----------- --------- --------- -- - ---------------------------------- ---------- -- -- ------------------- --------------------- --------- --------- -- - -------------------------------------------- ---------- -- -- ------------------ ------------ --------- ------- --------- -- - ----------------------------------- ------- ---------- -- -- ---------- ------------------- --------- -------- --------------- -- - ------ ------------------------------------------ -------- ---------------- - - -- -----------------------
使用
express-session-helpers
提供的所有方法都是与当前登录用户有关的,需要使用当前登录用户的 session
配置对象和相应的 ID(例如用户 ID)。
销毁所有会话
使用 destroyAll()
方法可以轻松地销毁所有会话。
// 示例代码 req.session.destroyAll((err) => { if (err) { console.error('destroy failed', err); } else { console.log('destroyed all'); } });
销毁除当前正在使用的会话以外的所有会话
使用 destroyAllButCurrent()
方法可以轻松地销毁除当前正在使用的会话以外的所有会话。
// 示例代码 req.session.destroyAllButCurrent((err) => { if (err) { console.error('destroy failed', err); } else { console.log('destroyed all but current'); } });
踢出某个或某些用户,或者踢出所有用户
使用 destroyUser()
方法可以轻松地踢出某个或某些用户,或者踢出所有用户。destroyUser(session, userId, callback)
方法带有两个可选参数,第一个参数表示会话配置对象,第二个参数表示要踢出的用户 ID 列表,以逗号分隔。如果未传递用户 ID,则将踢出所有用户。
-- -------------------- ---- ------- -- ---- - ------ ----------------------------- -- - -- ----- - ---------------------- -------- ----- - ---- - ---------------------- --- -------- - --- -- ---- - ------ ------------------------------------ ---- ----- -- - -- ----- - ---------------------- -------- ----- - ---- - ---------------------- ---- ------ - --- -- ---- - ------ ------------------------------------ -------------- ----- -- - -- ----- - ---------------------- -------- ----- - ---- - ---------------------- ----- ---- ---- ------ - ---
生成有限期时间的会话
使用 createTimedSession()
方法可以轻松地生成有限期时间的会话。该方法带有两个必选参数:
timeout
: 指定会话的存活时间,单位是毫秒。additionalData
: 新建会话中需要添加的自定义信息。
生成的新会话可以通过自动重定向或重载页面来自动更新过期时间。您还可以使用 JavaScript 客户端进行 AJAX 主动更新,以避免会话失效。
-- -------------------- ---- ------- -- ---- --- ----------- - -------------------------------------- - ------- ------ ---------- ------------------- --------- ----- ----- --- ------------------------- -- -------- ------ ---------- ------------------- --------- ----- ------ ------ -------------- ---------------- - ------------
结语
express-session-helpers
包的官方网站是 https://github.com/arthurkushman/express-session-managers。使用它可以让我们轻松地处理会话和会话存储。在开发过程中,我们可以相对轻松地处理扩展的需求,将其与自己的代码混合使用,以提高可读性。开源项目的资源将为学习和指导提供方便,帮助您更好地使用这个 npm 包。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055a1781e8991b448d7ba4