登录认证决定用户如何进入平台:登录与注册方式、邮箱验证、Turnstile 人机验证、OIDC / OAuth2 身份源和登录安全策略。
使用入口#
打开 管理端 → 登录认证。页面分为五组,每组都有独立的保存按钮:
- 登录页面
- 登录与注册
- 人机验证
- 绑定与验证
- 登录安全
OIDC / OAuth2 身份源表格位于“登录与注册”内,只有开启第三方登录后才会显示。
配置在用户下次登录或注册时生效。关闭某种登录方式前,先确认至少有一个管理员还能登录。
控制登录与注册方式#
- 打开登录与注册。
- 切换需要的方式。
- 点击保存。
| 开关 | 作用 |
|---|---|
| 邮箱登录 | 允许用户使用邮箱和密码登录。 |
| 用户名登录 | 允许用户使用用户名和密码登录。 |
| 邮箱注册 | 允许用户通过邮箱创建账号。 |
| 重置密码 | 允许用户在登录页重置密码,需先开启邮箱验证。 |
| 第三方登录 | 开启并展示已配置的 OIDC / OAuth2 身份源。 |
这些开关互相约束:
- 只有邮箱登录开启时才能开启邮箱注册。关闭邮箱登录会同时关闭邮箱注册和注册人机验证。
- 只有开启邮箱验证时才能开启重置密码。关闭邮箱验证会同时关闭重置密码。
- 同时关闭用户名登录和邮箱登录时,必须已开启第三方登录且至少一个管理员绑定了身份源,否则操作会被拒绝并提示无法关闭登录方式。
设置默认跳转路径#
- 打开登录页面。
- 在默认跳转路径中填写路径。
- 点击保存。
用户访问 /login 且没有 next 参数时,登录成功后会跳转到该路径。路径必须是站内路径,以单个 / 开头,例如 /chat。填写 https://example.com 或 //example.com 会被拒绝,提示默认跳转路径必须是站内路径,例如 /chat。
配置邮箱验证与 SMTP#
- 打开绑定与验证。
- 开启开启邮箱验证,SMTP 字段随即展开。
- 填写 SMTP 主机、SMTP 端口、SMTP 用户名和 SMTP 密码。
- 可选填写发件人。
- 点击保存。
| 字段 | 说明 |
|---|---|
| SMTP 主机 | 发送注册验证码的服务地址。 |
| SMTP 端口 | 服务端口,常见为 465 或 587,必须是 1–65535 之间的整数。 |
| SMTP 用户名 | 登录账号,通常为完整邮箱地址。 |
| SMTP 密码 | 登录密码或应用专用密码,保存后不回显。 |
| 发件人 | 验证码邮件的发件人,留空使用 SMTP 用户名。 |
开启邮箱验证后,只要必填 SMTP 字段为空或端口越界,保存就会失败:
- 开启邮箱验证后,需要填写 SMTP 主机、SMTP 端口、SMTP 用户名、SMTP 密码。
- SMTP 端口必须是 1-65535 之间的整数。
注册邮箱策略#
| 字段 | 行为 |
|---|---|
| 注册域名白名单 | 允许注册的邮箱域名,留空表示不限制,每行一个域名。 |
| 禁止邮箱别名 | 禁止使用 + 别名邮箱注册。 |
| 同邮箱自动绑定 | 第三方身份返回的邮箱与本地账号一致,且该身份源的邮箱验证字段(默认 email_verified)为 true 时,才自动绑定到已有账号。 |
启用注册人机验证#
注册人机验证基于 Cloudflare Turnstile,只作用于邮箱注册,不影响 OIDC / OAuth2 登录。
- 先开启邮箱注册并保存。
- 打开人机验证。
- 开启注册人机验证。
- 填写 Turnstile Site Key 和 Turnstile Secret Key。
- 点击保存。
Secret Key 保存后不回显,编辑时留空表示沿用原密钥。前置条件不满足时保存会失败:
- 请先开启邮箱注册,再启用 Turnstile 人机验证。
- 开启 Turnstile 人机验证后,需要填写 Turnstile Site Key、Turnstile Secret Key。
账号与密码规则#
用户注册、重置密码或管理员创建账号时,平台会执行以下规则。这些规则不可在登录认证页修改。
| 项目 | 规则 |
|---|---|
| 密码长度 | 8–128 个字符。 |
| 密码内容 | 不能是纯数字。 |
| 用户名长度 | 3–16 个字符。 |
| 用户名内容 | 小写字母、数字、_ 和 -;首尾必须是字母或数字;不能包含 @。 |
| 保留用户名 | admin、root、system、support、settings 等会被拒绝。 |
新增 OIDC / OAuth2 身份源#
- 在登录与注册中开启第三方登录并保存。
- 点击新增身份源。
- 选择预置项(Apple、GitHub、Google、Discord、Facebook、Hugging Face、Linux Do、Microsoft、Twitter (X)、Vercel),或选择自定义 OIDC / 自定义 OAuth2。
- 填写字段;OIDC 类型需要选择 Issuer URL 或 Discovery URL。
- 复制回调地址并填入身份源提供方的控制台。
- 设置 Scopes,必要时在高级设置中调整字段映射。
- 点击保存。
回调地址#
弹窗会显示需要身份源放行的回调地址。平台提供服务器回调桥接时,主字段为服务器回调地址(推荐),格式为 <base>/<身份源标识>/callback,同时显示旧版 Web 回调地址(即将废弃),格式为 <origin>/auth/callback?provider=<身份源标识>。未提供桥接时只显示旧版地址,标签为回调地址。点击复制回调地址即可复制。
身份源字段#
| 字段 | 说明 |
|---|---|
| 类型 | OIDC 或 OAuth2,必填。 |
| 名称 | 展示名称,必填。回调地址中的标识由名称推导,除非已有标识。 |
| 登录控制 | 允许登录平台账号,默认开启。 |
| 注册控制 | 允许自动创建账号,仅在登录控制开启时可用。 |
| Logo URL | 可选,显示在身份源旁。 |
| Client ID | 提供方分配的客户端标识,必填。 |
| Client Secret | 提供方分配的客户端密钥。新建时必填;保存后不回显,编辑时留空表示沿用原密钥。 |
| OIDC 地址 | OIDC 类型使用,选择 Issuer URL 或 Discovery URL,必填。 |
| Auth URL / Token URL / UserInfo URL | OAuth2 类型使用,三项均必填。 |
| Scopes | 请求的授权范围。自定义 OIDC 默认 openid profile email,自定义 OAuth2 默认 profile email。 |
| 来源字段 → 系统字段 | 将提供方返回字段映射到用户 ID、邮箱、邮箱验证状态、昵称和头像。默认分别为 sub、email、email_verified、name、picture。 |
管理身份源#
身份源表格显示名称、类型、登录控制、注册控制和 Client ID。
- 可直接在表格中切换登录控制和注册控制。登录控制未开启时不能开启注册控制,否则提示请先开启登录控制。
- 拖动排序手柄可调整顺序,顺序会自动保存。
- 点击名称或铅笔图标进入编辑;点击垃圾桶图标删除。
- 删除身份源会解绑所有使用它的账号。若存在账号仅依赖该身份源登录,平台会显示强制删除身份源。强制删除后,这些账号将无法继续通过该身份源登录。删除前先确认这些用户已设置密码或绑定其他身份源。
设置登录安全#
- 打开登录安全。
- 按需填写各项。
- 点击保存。
| 字段 | 默认值 | 说明 |
|---|---|---|
| 访问令牌有效期 | 24 | Access Token 有效期,单位小时,范围 1–168。 |
| 登录保持时间 | 720 | Refresh Token 与会话保持时间,单位小时,范围 1–8760。 |
| 失败锁定阈值 | 5 | 同一账号连续登录失败达到该次数后进入锁定,填 0 表示关闭锁定。 |
| 锁定时长 | 15 | 登录失败触发锁定后的持续时间,单位分钟,填 0 表示关闭锁定。 |
| 平台限流 | 关闭 | 开启后由平台返回 HTTP 429。交由 Traefik、网关或其他外层组件限流时可关闭。 |
| 用户接口限流 | 60 | 登录后用户接口的基础每分钟请求上限;平台限流关闭时不生效。 |
| 公开鉴权限流 | 30 | 公开登录、注册、刷新令牌等接口的基础每分钟请求上限;平台限流关闭时不生效。 |
查看安全事件#
登录、双因素、密码等安全事件记录在管理端日志中。
- 打开 管理端 → 日志。
- 选择认证安全页签。
- 使用搜索框、结果筛选和排序菜单缩小范围。
- 点击任意一行查看认证日志详情。
| 列 | 含义 |
|---|---|
| ID | 事件记录 ID。 |
| 用户 | 操作者的昵称、用户名或用户 ID。 |
| 事件 | 事件类型。 |
| 结果 | 成功、失败或阻断。 |
| 原因 | 产生该结果的原因(如有)。 |
| IP | 客户端 IP 地址。 |
| 时间 | 事件发生时间。 |
| 请求 ID | 请求关联 ID。 |
搜索匹配用户 ID 或事件类型。排序支持发生时间(从新到旧、从旧到新)和 ID(从新到旧、从旧到新)。清理日志可按截止日期删除认证安全历史,但不会改变当前会话和凭据。
配置项对照#
以下键均属于 auth 命名空间。
| 分组 | 配置键 |
|---|---|
| 登录页面 | auth.login_default_next_path |
| 登录与注册 | auth.email_login_enabled、auth.username_login_enabled、auth.email_registration_enabled、auth.password_reset_enabled、auth.third_party_login_enabled |
| 人机验证 | auth.turnstile_registration_enabled、auth.turnstile_site_key、auth.turnstile_secret_key |
| 绑定与验证 | auth.email_verification_enabled、auth.smtp_host、auth.smtp_port、auth.smtp_username、auth.smtp_password、auth.smtp_from、auth.email_registration_allowed_domains、auth.email_registration_block_plus_alias、auth.auto_link_verified_email |
| 登录安全 | auth.token_ttl_hours、auth.refresh_token_ttl_hours、auth.login_max_failures、auth.login_lock_minutes、auth.rate_limit_enabled、auth.rate_limit_rpm、auth.public_auth_rate_limit_rpm |
OIDC / OAuth2 身份源以独立记录保存,不是单个 auth.* 键。每条记录各自维护登录控制和注册控制。
常见问题#
- 保存时提示跳转路径错误。 默认跳转路径必须是站内路径,例如
/chat,去掉协议和域名。 - 登录方式开关被拒绝。 只保留第三方登录前,需要先让管理员绑定可用身份源,再关闭用户名登录和邮箱登录。
- 邮箱验证无法保存。 补全 SMTP 主机、端口、用户名和密码,端口需在 1–65535 之间。
- Turnstile 无法保存。 先开启邮箱注册,再填写 Site Key 和 Secret Key。
- 第三方登录回调报错。 身份源控制台中登记的回调地址必须与弹窗显示的地址完全一致,包括身份源标识。
- 保存时提示登录状态已失效。 管理端会话已过期,重新登录后再操作。