Skip to content

feat(auth): 支持 OAuth 模式切换与单用户回退#97

Open
flintttan wants to merge 5 commits intopoco-ai:devfrom
flintttan:feat/auth-mode-fallback
Open

feat(auth): 支持 OAuth 模式切换与单用户回退#97
flintttan wants to merge 5 commits intopoco-ai:devfrom
flintttan:feat/auth-mode-fallback

Conversation

@flintttan
Copy link
Copy Markdown

变更说明

本 PR 为系统增加了可配置的认证模式,并优化了登录页行为:

  • 支持根据后端配置动态展示可用的登录方式(Google / GitHub)
  • 在未配置 OAuth 时,支持按模式选择:
    • 强制要求配置登录
    • 自动回退为单用户模式
  • 修复前端在 Docker build 阶段依赖后端地址的问题,改为登录页运行时再请求认证配置

认证模式

新增后端环境变量:

  • AUTH_MODE

支持以下取值:

  • oauth_required
    • 必须使用 OAuth 登录
    • 如果未配置任何 provider,则登录页显示“需要先配置登录方式”
  • oauth_optional
    • 如果配置了 provider,则仍要求登录
    • 如果未配置 provider,则自动回退为单用户模式
  • single_user
    • 始终使用单用户模式,不走 OAuth

默认值:

  • AUTH_MODE=oauth_required

环境变量

本次新增

  • AUTH_MODE
    • 类型:string
    • 可选值:
      • oauth_required
      • oauth_optional
      • single_user

相关已有配置

  • GOOGLE_CLIENT_ID (string)
  • GOOGLE_CLIENT_SECRET (string)
  • GITHUB_CLIENT_ID (string)
  • GITHUB_CLIENT_SECRET (string)
  • AUTH_COOKIE_NAME (string)
  • AUTH_COOKIE_SECURE (boolean)
  • AUTH_SESSION_TTL_DAYS (integer)
  • OAUTH_SESSION_COOKIE_NAME (string)
  • FRONTEND_PUBLIC_URL (string)
  • FRONTEND_DEFAULT_LANG (string)

单用户默认配置

代码中保留默认值,不要求在 .env.example 中显式配置:

  • SINGLE_USER_ID,默认:default
  • SINGLE_USER_NAME,默认:Local User

主要实现

后端

  • 新增 /api/v1/auth/config 接口,供前端获取当前认证配置
  • 增加单用户回退逻辑
  • 单用户模式下自动创建默认用户
  • 单用户不再写入 primary_email,避免与 OAuth 用户邮箱冲突

前端

  • 登录页运行时获取 /auth/config
  • 根据配置动态显示可用登录方式
  • 未配置 provider 且必须登录时,显示配置提示
  • 单用户模式下自动跳转进入系统
  • 增加轻量缓存,减少重复请求认证配置

验证

已完成:

  • ruff check .
  • python3 -m compileall backend/app
  • pnpm lint
  • pnpm build
  • frontend Docker build
  • CI Docker build

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant