认证场景(国内 / 美国)
平台支持 两套互斥的登录方案,按活动现场所在地区与网络环境选用其一。同一套部署 不要混用 两种玩家入口(避免 /login 同时暴露登录码与 OAuth 造成困惑)。
对照总览
| 角色 | 国内场景(CN) | 美国场景(US) |
|---|---|---|
| Player | /login → 6 位登录码(player-code) | /login → Google / Azure AD OAuth |
| Admin | /staff-login → 白名单邮箱 + 密码(staff-credentials) | /login 或统一入口 → OAuth,邮箱须在 ADMIN_EMAILS |
| Display | /staff-login → 白名单邮箱 + 密码 | OAuth,邮箱须在 DISPLAY_EMAILS |
国内场景(CN)
面向文化节等 国内线下活动:玩家无需 Google 账号,工作人员与玩家入口分离。
Player
- Admin 在
/admin发布登录码 - Display
/show大屏展示 6 位码 - 玩家打开
/login,CnLoginPanel输入登录码 - NextAuth
signIn("player-code")→ Backendverify-code→ 分配玩家 #NNN
详见 登录码流程。
Admin / Display
- 打开
/staff-login(不是/login) - 输入
auth.ts白名单中的邮箱 + 环境变量STAFF_ADMIN_PASSWORD/STAFF_DISPLAY_PASSWORD - NextAuth
signIn("staff-credentials")→ 按角色跳转/admin或/show
信息
国内场景下 不需要 配置 GOOGLE_CLIENT_* / AZURE_AD_*(除非 Staff 也想用 OAuth 作为备选)。
必填环境变量(CN)
| 变量 | 用途 |
|---|---|
STAFF_ADMIN_PASSWORD | Admin 密码登录 |
STAFF_DISPLAY_PASSWORD | Display 密码登录 |
JWT_SECRET / NEXTAUTH_* | Session |
美国场景(US)
面向 可稳定访问 Google / Microsoft 账号 的部署:三端均通过 OAuth,无登录码、无 Staff 密码表单。
三端登录
| 角色 | 入口 | Provider |
|---|---|---|
| Player | /login → UsLoginPanel | google 和/或 azure-ad |
| Admin | /login(OAuth 后 middleware 识别 Admin) | 同上,邮箱 ∈ ADMIN_EMAILS |
| Display | /login | 同上,邮箱 ∈ DISPLAY_EMAILS |
- 身份标识为 OAuth 返回的 真实 email,大屏显示名一般为邮箱(非
玩家 #NNN) - 不使用
POST /api/admin/publish-login-code与/staff-login(相关 UI 在 US 构建中隐藏或注释)
启用方式(开发 / 部署)
- 配置 OAuth 环境变量(见 环境变量 美国场景一节)
frontend/src/app/login/page.tsx启用RegionToggle、UsLoginPanel,隐藏或注释CnLoginPanel为国内专用- 生产环境在 OAuth 控制台登记
NEXTAUTH_URL回调
详见 添加新功能 — 美区 OAuth。
必填环境变量(US)
| 变量 | 用途 |
|---|---|
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | Google OAuth(常用) |
AZURE_AD_* | Azure AD(可选) |
JWT_SECRET / NEXTAUTH_* | Session |
不需要 STAFF_*_PASSWORD(除非保留 Staff 作为运维备用入口)。
如何选择场景
| 考虑因素 | 建议 |
|---|---|
| 现场网络、玩家无 Google | 国内 + 登录码 |
| 玩家与工作人员均有学校/组织 Microsoft 或 Google | 美国 + OAuth |
| 需要控场、匿名编号、大屏发码 | 国内 |
| 长期线上、身份与邮箱审计一致 | 美国 |
同一 Frontend 代码库通过 登录页组件与构建时 env 切换;BUCSSA 文化节默认 国内场景。
Provider 与 API 对照
| Provider | 场景 | 用户 |
|---|---|---|
player-code | 国内 | Player |
staff-credentials | 国内 | Admin / Display |
google | 美国(+ 可选 Staff) | 三端 |
azure-ad | 美国(+ 可选 Staff) | 三端 |
国内场景专用 API:publish-login-code、close-login-code、verify-code(见 REST API)。