部署与运维
后台账户安全
v1.25 起后台内置两步验证、登录设备管理和审计日志,无需安装插件(WordPress 需要 Wordfence、WP 2FA、Simple History 等多个插件)。
两步验证(2FA)
每个后台账户可以在右上角菜单 → 账户安全(/admin/account)中开启:
- 点击「开启两步验证」,用身份验证器 App(Google Authenticator、Microsoft Authenticator、1Password、Authy 等)扫描二维码;
- 输入 App 显示的 6 位验证码确认;
- 保存显示的 10 个恢复码(只显示一次)。手机丢失时,每个恢复码可以代替验证码登录一次。
开启后,登录时输入密码后会进入第二步,输入验证码(或恢复码)才能进入后台。每个验证码只能用一次;验证码和恢复码都有错误次数限制。
- 关闭两步验证或重新生成恢复码需要输入当前密码(关闭还需要验证码或恢复码)。
- 管理员可以在 用户 列表中为丢失手机的用户「重置两步验证」(同时退出该用户的所有设备),用户重新设置即可。
- 密钥加密保存(AES-GCM,密钥由
NUXT_JWT_SECRET派生),数据库泄露也无法得到密钥。更换NUXT_JWT_SECRET会使已开启的两步验证失效:用户需要用恢复码登录,或由管理员重置。 - 唯一的管理员同时丢失手机和恢复码时,可以在数据库中删除该用户在
cms_user_security表中的记录。 - 通过
POST /api/auth/token获取 API 令牌的账户开启两步验证后,请求中需要带code(验证码或恢复码)。 - 演示站点(
NUXT_PUBLIC_DEMO_MODE)不允许修改共享演示账户的安全设置。
站点自定义的登录页只要调用 useAuth().login()(所有官方模板和 nuxtcms doctor 检查的写法),就会自动进入第二步页面 /admin/verify。
登录设备
「账户安全」页列出当前账户所有登录的设备:浏览器与系统、IP、国家/地区(Cloudflare 上)、登录时间和最近活动时间。
- 退出单个设备,或 退出其他所有设备(升级前签发的登录也会一并失效);
- 修改密码后其他设备自动退出,当前设备保持登录;
- 管理员可在「用户」列表中让某个用户在所有设备上退出。
修改密码
「账户安全」页可以修改自己的密码(编辑和管理员都可以),需要输入当前密码,新密码至少 8 位。
审计日志
后台 审计日志(/admin/audit,仅管理员)记录:
- 登录、登录失败(含输入的邮箱)、退出、获取 API 令牌;
- 两步验证开启 / 关闭 / 验证失败、使用恢复码、重新生成恢复码、修改密码、退出设备;
- 后台的每一次修改(所有
POST /api/admin/**,包括插件的后台接口):谁、哪个资源、哪个 ID、改了哪些字段。只记录字段名和标题、别名、邮箱等简短标识,不记录内容和密码等敏感字段的值(敏感字段名后标*)。
可以按操作类型、用户 / 对象 / IP、日期筛选,并导出 CSV(最多 10000 行,已防公式注入)。记录保留 180 天,由定时任务(/api/cron/dispatch)自动清理;已结束 30 天的登录设备记录也会清理。
升级说明
新增数据表 user_security、user_sessions、audit_logs、redirects、not_found_log(迁移 0017,upgrade.mjs / nuxtcms fleet upgrade 自动执行)。升级前已登录的会话继续有效,但不会出现在设备列表中。