Skip to content

[Bug] mmx auth login 区域检测失败时静默回退到 global,导致国内用户 API 全部 401 #191

Description

@xy2219223637-source

问题描述

mmx auth login 在自动 region 检测失败时(例如网络/VPN 屏蔽了检测接口),会静默回退到 global 区域并写入 ~/.mmx/config.json。如果用户用的是国内 Token Plan 订阅的 key(sk-cp- 前缀),用 global 端点调用业务接口会全部返回 HTTP 401

quota 接口似乎有 fallback 兜底,所以问题被部分隐藏,进一步增加排查难度。

复现步骤

  1. 准备一个国内 Token Plan 的 API key(前缀 sk-cp-...),先手动写入 config.json:
    { "region": "cn", "api_key": "sk-cp-..." }
  2. 在会让区域检测接口被拦的环境下(例如开着 VPN)执行:
    mmx auth login --api-key sk-cp-...
  3. 观察到输出:
    Detecting region... failed
    Warning: API key failed validation against all regions (global, cn).
      This usually means the API key is invalid or the network is blocking requests.
      Falling back to 'global'. Subsequent requests may fail.
    
  4. 检查 ~/.mmx/config.json,发现 region 已被覆盖成 global
  5. 执行 mmx text chat --message "ping" → 返回 HTTP 401

期望行为

  1. 区域检测失败时不要回退到 default——至少保留用户上一次设置的 region
  2. 或者直接报错退出,让用户手动指定:
    mmx config set --key region --value cn
  3. warning 文本应该明确给出修复建议

实际行为

  • warning 只笼统说 "Falling back to 'global'. Subsequent requests may fail."
  • 后果:mmx text chat / mmx video generate 等所有业务接口 HTTP 401
  • mmx quota 因为有 fallback 不报错,掩盖问题

临时解决方案

mmx config set --key region --value cn

环境信息

  • mmx-cli: v1.0.16
  • Node.js: v24.14.0
  • macOS: Darwin 21.6.0
  • API key 前缀:sk-cp-(国内平台)
  • 复现环境:开着 VPN(即使关掉 VPN,区域检测接口仍可能偶发失败)

影响范围

所有依赖 mmx auth login 自动检测的中国区用户,遇到网络抖动就立刻踩坑,且因为 quota 接口能通,用户很难第一时间意识到 region 已经被改错

建议修复方向

  1. 检测失败时保留 user-set region,不自动覆盖
  2. 或者在 config.json 已存在有效 region 时跳过 detection,直接信任已有值
  3. detection 失败时返回非零退出码,并明确提示手动指定

我已经在 #docs/token-plan/minimax-cli FAQ 里看到官方建议手动 mmx config set --key region --value cn,说明这个 case 是已知的——但应该在 CLI 层面默认行为就处理好,而不是让每个用户都踩一遍。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions