管理员用户会话插件
显示管理员用户的活动会话( 每个浏览器签名一次) 并让他们取消 任何这样的会议。 日志删除也会取消会话, 因此其认证符号停止工作 而不是立即保持有效 直到它结束.
完整文档: adminforth.dev/docs/torial/Plugins/用户会议
安装
npm i @adminforth/user-sessions @adminforth/key-value-adapter-redis --save
import UserSessionsPlugin from '@adminforth/user-sessions';
import RedisKeyValueAdapter from '@adminforth/key-value-adapter-redis';
export const admin = new AdminForth({
...
globalPlugins: [
new UserSessionsPlugin({
keyValueAdapter: new RedisKeyValueAdapter({ redisUrl: process.env.REDIS_URL }),
}),
],
...
});
会话随后出现在用户菜单设置中的"主动会话"下.
要让特权用户看到并取消其他用户的会话,请添加 canManageOtherUsersSessions。 。 。 .
同一块随后出现在用户资源的显示页面:
new UserSessionsPlugin({
keyValueAdapter,
canManageOtherUsersSessions: async (adminUser) => adminUser.dbUser.role === 'superadmin',
})
没有这个选项,其他用户的会话就不会显示,也不能被任何人取消.
如何运作
- AdminForth将一个独特的会话id放入每个已发行的JWT认证.
auth.afterSessionCreated钩子店<user pk>:<session id>在键值适配器中 和符号一样过期,持有ip, (中文(简体) ),country, (中文(简体) ),user_agent, (中文(简体) ),created_at财务报告和审定财务报表last_used_at。 。 。 .auth.adminUserAuthorize勾钩检查请求的会话是否仍然被存储,以及 刷新其内容last_used_at未保存的会话以401被否决.auth.beforeLogout勾钩和撤销端点删除已存储的会话, 并删除一次 超过5秒后: 此时正在运行的请求可能已经读取过刚刚开始的会话 刷新时写回last_used_at。 。 。 .
因为缺失的记录意味着"被撤销",商店必须活过应用过程:使用Redis(或 (b) 生产方面的另一个共同、持久的适应器。 每个重启的标志都有一个内膜适配器 全部用户退出。 安装插件也会标出所有在它之前登录过的人 .
没有会话 id 授权的请求—— MCP api 密钥, 或插件前发布的令牌 已安装——单独安装.
选项
| 选项 | 默认 | 说明 |
|---|---|---|
keyValueAdapter | 所需经费 | 存储活动会话的地方 |
collection | adminforth-user-sessions | 适配器中使用的收藏( 键前缀) |
countryHeader | CF-IPCountry | 由您的 CDN 设置的双字母国家代码标题 。 空字符串禁用 |
canManageOtherUsersSessions | —— 说 | (adminUser) => Promise<boolean>。当返回真实时,该用户查看并可以取消用户显示页面上其他用户的会话 |
resolveCountry | —— 说 | ({ ip, headers }) => Promise<string | null>,当信头没有告诉国家时打来 |
lastUsedThrottleSeconds | 60 | 多长时间 last_used_at 正在刷新, 每个刷新时写一个适配器 |
这个 Device 列显示浏览器和从存储中解析的 OS User-Agent (例如:.
Chrome 131 on macOS)带有桌面/移动/平板图标。 生头如来被收贮,所以
分析总是运行在当前插件版本上.
客户端 IP 取自 adminforth.auth.getClientIp配置 auth.clientIpHeader 何时
运行在代理服务器后面——否则IP不可信,并且是 null 为私人地址.
发展
pnpm i
# hooks this plugin uses are not released yet, so point it at a local adminforth checkout
# (every `pnpm i` resets this link back to the published package)
pnpm link ../../adminforth
pnpm test
pnpm build