news 2026/10/8 15:35:01

openGym管理员后台完全指南:邀请码、审计日志与用户管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openGym管理员后台完全指南:邀请码、审计日志与用户管理

openGym管理员后台完全指南:邀请码、审计日志与用户管理

【免费下载链接】openGymSelf-hosted gym & body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGym

openGym 是一款自托管的健身房与体重记录应用,而它的管理员后台是多人使用实例的运营中枢:用邀请码控制谁能注册、用审计日志追踪每次登录与管理员操作、用用户管理功能查看、停用或删除任何账户。本指南带你 10 分钟掌握这三项核心能力,让你的实例安全可控。

一、管理员后台是什么 📋

管理员后台(Admin dashboard)是 openGym 面向实例管理员的运营页面,由一组卡片组成,覆盖运行实例的全部关键信息:

  • 总览指标:用户总数、正在训练的人数、7 天内活跃数、被停用的账户数
  • 正在训练:谁此刻正在做哪组动作,实时刷新
  • 邀请码卡片:生成、复制、吊销注册邀请码
  • 用户列表:点击任一用户查看其训练概况
  • 活动日志:登录成功/失败、注册被拒、管理员操作全记录

这个页面刻意只展示统计数字,不会泄露任何人的具体训练数据。界面源码位于 frontend/src/views/Admin.jsx,对应的接口定义在 api/openapi.yaml 的 admin 标签组中。

二、三步开启管理员权限 ⚙️

openGym 默认是开放注册、无管理员模式。开启后台只需三步:

  1. 先注册自己的账户(passkey 档案)
  2. 复制你的账户 ID:进入设置 → 账户 → Account ID,点一下即可复制(它也存在./data/db.json的users[].id字段中)
  3. 在.env中设置:ADMIN_UIDS=你的账户ID(多个管理员用逗号分隔),重启实例

完成后,你的设置页面会出现Admin dashboard入口。管理员权限由你的 passkey 把关并在服务端二次校验,无需独立登录。完整步骤见官方文档 docs/SELF_HOSTING.md 的「Multiple users」章节。

三、邀请码:控制谁能注册 🔑

想让健身房实例只对熟人开放?在.env中加入:

  • INVITE_ONLY=1—— 新账户必须持有邀请码才能创建档案
  • ALLOW_GUEST=0—— 同时移除「无账户继续使用」的访客按钮(访客模式数据从不上服务器,在封闭实例里没有意义)

在后台的Invite codes卡片中:

操作说明
New code一键生成 16 位一次性邀请码并自动复制到剪贴板
点击代码随时复制未使用的代码
删除图标吊销未使用的代码;已兑换的代码不可吊销
Already used 区展示已用代码对应的是哪位用户

邀请码是一次性的,用掉即失效;切换到邀请制后,已有账户完全不受影响。

四、审计日志:谁登录了、谁失败了 🕵️

Activity log(审计日志)记录四类事件:登录/登出、失败尝试、被拒绝的注册,以及所有管理员操作(停用账户、创建/吊销邀请码、清空日志本身)。

日志以「每行一个 JSON 对象」的形式存在./data/audit.log,面板与命令行读的是同一份文件——你可以直接tail -f data/audit.log配合jq分析。日志条目的人话翻译规则在 frontend/src/lib/audit.js 中,涵盖从auth.login.fail到admin.invite.revoke的全部事件类型。

关键配置(均在.env):

变量默认值作用
AUDIT_LOG开启设为0完全关闭审计
AUDIT_MAX5000最多保留的事件条数
AUDIT_DAYS90最长保留天数
AUDIT_IPoff设为net只记网段、full记完整 IP

几个值得注意的隐私设计:

  • 默认不记录 IP,也从不存储浏览器指纹或失败登录的 passkey ID
  • 访客从不出现——访客模式与服务器零通信
  • 被停用的账户会「安静」下来:它只会留下持续失败的登录尝试
  • 清空日志本身也会被记录,且事件 ID 连续计数,任何缺口都一目了然

面板上可按All / Sign-ins / Admin / Failed四个标签筛选,失败事件会以红色failed徽章标出——连续误触 Face ID 也不会被渲染成「安全事件」,只是一排红色小徽章。

五、用户管理:查看、停用与删除 👥

点击用户列表中的任意一行,进入用户详情页:

  • 概况:工作锻炼数、体重记录数、计划数、最近同步时间
  • 标签:admin、disabled、邀请码来源、密码登录、注册日期一目了然
  • 训练历史:最近 60 次锻炼的名称、日期、时长与总量

三种核心操作,破坏力递增:

  1. 停用账户(Disable)—— 对方在所有设备登出、无法再登录和同步,但数据原封保留,随时可一键重新启用。这是日常首选。
  2. 导出数据(Download their data)—— 把该用户的完整档案导出为 JSON 文件。删除前强烈建议先做这一步。
  3. 删除账户(Delete)—— 全应用唯一的破坏性操作,因此要求两次确认:抹掉其全部锻炼、体重、计划、passkey 与推送通知,不可恢复。

若实例开启了密码登录(PASSWORD_LOGIN=1),管理员还可以为用户生成一次性重置码:代码只显示一次、24 小时有效、仅以哈希存储;发放后旧密码立即失效、用户全局登出,但其 passkey 仍可正常使用。管理员账户之间无法互相重置,防止权限越权。

六、数据存在哪里、如何备份 💾

所有数据都集中在宿主机项目的./data目录:

文件内容
db.json档案与 passkey 公开数据
state-<user>.json每个用户的计划、锻炼、体重与设置
audit.log管理员审计日志
secret会话 cookie 签名密钥

备份只需打包整个目录,例如:

tar czf opengym-backup-$(date +%F).tar.gz data/

恢复时解回项目目录即可。由于 passkey 私钥从不上服务器(留在手机安全硬件或密码管理器中),./data就是你实例的全部家当。

七、安全小贴士 🔒

  • 邀请码本身是 64 位随机值,防猜测靠的是长度,暴力尝试的拦截交给反向代理的限流
  • 管理员路由全部在服务端强制校验(401/403),前端隐藏页面不算安全边界
  • 登录失败节流按账户+地址双维度计数,切换登录名称也绕不开暂停
  • 更多细节可查阅 SECURITY.md 与 docs/SELF_HOSTING.md

写在最后

邀请码管住大门,审计日志看住动静,用户管理兜住善后——三张卡片加起来,就是 openGym 管理员后台的全部。对于家庭健身房、跑团或小型团队来说,这套纯.env配置 + 面板操作的方案,足够以最小成本守住你的自托管健身实例。

【免费下载链接】openGymSelf-hosted gym & body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGym

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 15:34:58

FPGA红外解码实战:DE2-115平台NEC协议状态机设计

把 DE2-115 这块板子拿来跑红外解码&#xff0c;是我带 FPGA 课程设计时最常推荐的题目之一。原因很简单&#xff1a;红外遥控器常见、成本低、现象直观&#xff0c;但要把 NEC 协议在硬件上完整走一遍&#xff0c;涉及边沿检测、时序测量、状态机、移位寄存器、数码管显示甚至…

作者头像 李华
网站建设 2026/10/8 15:34:44

ClaudeCode本地开发环境配置实战:从VS Code到Nginx代理

1. 这不是又一个“AI编程工具课”&#xff0c;而是一份能直接上手写项目的实操手册 你点开这个标题&#xff0c;大概率是被“B站讲得最好”“薪资翻倍”这些词勾住的。但说实话&#xff0c;我去年帮三个团队做AI辅助开发落地时&#xff0c;翻遍了全网视频——从2023年早期的Cod…

作者头像 李华
网站建设 2026/10/8 15:34:27

AI编程助手进阶:用superpowers技能包打造高效人机协作工作流

很多开发者第一次听说 superpowers 时&#xff0c;都会下意识觉得这是某个“锦上添花”的小工具&#xff0c;但实际上它是一套能直接改变你与 AI 协作方式的能力扩展包。我在自己的项目里用了一段时间之后&#xff0c;最大的感受就是&#xff1a;以前 AI 只是帮我写代码&#x…

作者头像 李华
网站建设 2026/10/8 15:34:18

大模型上下文管理实战:context-mode设计与翻车排查

先说一个我前阵子差点通宵的事&#xff1a;一个跑得顺顺当当的AI客服Demo&#xff0c;对话到第二十轮&#xff0c;模型突然像失忆一样&#xff0c;把用户最开始提的“预算1500以内&#xff0c;要白色降噪耳机”忘得干干净净&#xff0c;开始推荐上万的旗舰款。我的第一反应是换…

作者头像 李华
网站建设 2026/10/8 15:32:32

同一条 SQL 为什么会跑出完全不同的执行计划,理解 SAP HANA 中数据对 SQL Optimizer 的影响

在 SAP S/4HANA 项目里,经常会遇到一种很容易让开发人员困惑的性能问题。 一条 SQL 在开发系统里执行只需要几十毫秒,进入测试系统后依然表现正常,可到了生产系统,同样的 SQL 突然执行几秒甚至几十秒。代码没有变化,CDS View 没有变化,WHERE 条件看上去也完全一样,可通…

作者头像 李华
网站建设 2026/10/8 15:31:40

国产3D软件与AI本地一键启动,让渲染提速不再靠换电脑

上周六晚上&#xff0c;一个做电商的朋友突然给我发来一段屏幕录制视频&#xff0c;语气里全是崩溃&#xff1a;她用某国外老牌3D软件渲染一张产品场景图&#xff0c;跑了快三个小时还没出完。她问我“是不是我笔记本太差了”&#xff0c;我看了一眼配置&#xff0c;i7加RTX 30…

作者头像 李华