Skip to content

fix: 修正账号重启、重新导入与管理端来源判定 - #21

Merged
Mag1cFall merged 1 commit into
mainfrom
fix/account-import-lifecycle
Nov 10, 2026
Merged

Mag1cFall merged 1 commit into
mainfrom
fix/account-import-lifecycle

Conversation

@Mag1cFall

@Mag1cFall Mag1cFall commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

问题

  • 在管理端对账号点“验证”、修改代理、启用或修改设置后,账号用服务启动时读到的旧登录状态重新初始化,运行期间更新过的 Cookie 被丢掉:Chrome 导入的账号每次多续签一次,Cookie 导入的账号在旧 Cookie 过期后变成需要重新导入。
  • 对已有账号重新导入 Cookie,或用 setup --remote 重新上传,会清掉这个账号的固定代理和停用状态。
  • 服务运行时在同一目录执行 gemini-web2api setup,命令显示成功,导入的内容随后被运行中的服务覆盖。
  • Chrome 导入的账号在 Linux 与 macOS 上一律不能续签,其中没有设备绑定密钥的账号本来不依赖 Windows。
  • 服务放在本机的 nginx 等反向代理之后:没有开启管理端登录时,经反向代理进来的外部请求被当作本机访问,可以直接打开管理端;开启登录后,所有访问者共用一个密码错误计数,任何人连续输错 5 次,管理员也暂时无法登录。
  • 一次导入多个 Chrome 账号时,每个账号都重新扫描全部 Profile 并读取一次解密密钥。
  • 导入页的 Profile 按 1、10、11、2 的顺序排列;邮箱只填了空白的导入请求显示完成,实际没有导入任何账号。
  • 带密码的账号代理在账号列表中显示为 %2A%2A%2A。
  • 账号页的“修改代理”对话框预填的是隐去密码的代理地址,改动地址后保存,会把掩码当作密码存下。

修复

  • 账号每次重新初始化都读取认证文件中最新的登录状态与设置。
  • 重新导入已有账号时保留它的停用状态;代理一栏留空时保留原来的固定代理。
  • 认证目录正被运行中的服务使用时,setup 直接退出,并提示改用管理端的“导入账号”页;setup --remote 照常可用。
  • 没有设备绑定密钥的账号在任何系统上都能续签;带设备绑定密钥的账号仍在导入它的那台 Windows 上续签;去掉了 refresh token 必须为 103 字节的限制。
  • 采信本机反向代理在 X-Forwarded-For 中转发的客户端地址,本机访问判定、登录限流与请求记录都使用它;其他来源自报的地址不采信。README 的反向代理示例补上了 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;。
  • 一次导入任务只扫描一次 Chrome、读取一次解密密钥;没有选中任何账号时返回错误;导入页按 Profile 编号排列。
  • setup --remote 上传的内容先校验再写入认证目录。
  • “修改代理”对话框预填账号固定代理的原文,账号列表与账号页显示的代理仍隐去密码。
  • 账号代理的密码统一显示为 xxxxx,并合并了几处重复的代理脱敏与 Cookie 转换代码。

测试

以下对照都在本机用真实账号完成,“修改前”为 v0.1.8。

  • 验证后的重新初始化:用一个 Cookie 已全部失效的 Chrome 账号启动服务,再点一次“验证”,修改前共续签 2 次,修改后 1 次。
  • 重新导入:给账号设置固定代理后在管理端重新导入 Cookie(代理留空),修改前固定代理被清空,修改后保留;用 setup --remote 重新上传同一账号,修改前固定代理与停用状态都被清掉,修改后都保留。
  • 运行中的 setup:服务运行时在同一目录执行 setup --cookie-file,修改前退出码为 0,导入的内容在点一次“验证”后被覆盖;修改后退出码为 1 并给出提示,账号文件没有变化。
  • 反向代理:未开启登录时,从本机发出带 X-Forwarded-For: 203.0.113.5 的管理端请求,修改前返回 200,修改后返回 403;开启登录后,一个地址输错 5 次密码,另一个地址用正确密码登录,修改前返回 429,修改后返回 200,输错的那个地址仍是 429。
  • 批量导入:在管理端一次导入 3 个 Chrome 账号,修改前用时 17.8 秒,修改后 15.7 秒,三个账号都可用,重启服务后仍可用;只填空白邮箱的导入请求,修改前显示完成,修改后提示“没有选择要导入的账号”。
  • 修改代理:给账号设置 http://lab:secret@127.0.0.1:7890,在对话框里只把主机改成 localhost 后保存,修改前存下的密码变成 %2A%2A%2A,修改后仍是 secret。
  • Linux 续签:手头没有不带设备绑定密钥的真实账号,这一项用本地模拟的 Google 登录接口验证,在 Linux 上修改前报“Chrome OAuth 导入仅支持 Windows”,修改后取得 Cookie。

- 让账号每次启动都取认证文件当前的 Cookie、续签材料与设置,验证、改代理与改设置后沿用运行中的会话
- 让 Chrome 导入、Cookie 导入与配对上传写入已导入的账号时沿用停用标记与未重新填写的固定代理
- 让 setup 在输出目录正被运行中的服务使用时退出,提示从管理端导入
- 放开非 Windows 系统上无设备绑定密钥账号的续签,去掉 refresh token 的固定长度检查
- 让一次 Chrome 导入任务的各账号共用账号发现结果与主密钥,没有选中账号时返回错误,导入页按 Profile 编号排列
- 校验配对上传的认证状态后原子写入认证目录
- 以本机反向代理转发的客户端地址判定本机访问、登录限流与请求记录
- 让修改代理对话框以账号固定代理的原文为初值,修改地址后保存时保留代理密码
- 合并代理脱敏、Cookie 转换与首轮初始化等待的重复实现,账号代理的密码统一显示为 xxxxx
- 同步中英文 README 与开发文档

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@Mag1cFall
Mag1cFall force-pushed the fix/account-import-lifecycle branch from ca3400a to 6bec62e Compare November 9, 2026 23:09
@Mag1cFall
Mag1cFall merged commit 382da03 into main Nov 10, 2026
15 checks passed
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