Skip to content

fix(filesystem): dedupe concurrent initial auth requests#1437

Open
cyfung1031 wants to merge 1 commit into
mainfrom
fix/sync/016
Open

fix(filesystem): dedupe concurrent initial auth requests#1437
cyfung1031 wants to merge 1 commit into
mainfrom
fix/sync/016

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

概要

修复首次授权场景下,并发调用 AuthVerify() 时会重复触发授权流程的问题。

当本地不存在 token 或 token 缺少 accessToken 时,同一网盘类型的多个并发认证请求现在会复用同一个授权 Promise,避免重复打开授权页、重复请求 token、重复写入本地存储。

主要改动

  • 新增 authTokenPromises,按网盘类型缓存首次授权中的 Promise
  • 并发 AuthVerify(netDiskType) 在缺少 token 时复用同一次授权请求
  • 授权成功后只保存一次 token
  • 授权流程结束后清理对应的 pending Promise,避免影响后续认证
  • 保留原有 refresh token 并发去重逻辑不变

修复的问题

在多个同步任务或多个文件系统操作几乎同时触发认证时,如果当前没有可用 token,之前每个请求都会各自执行:

  • 打开授权页
  • 请求 GetNetDiskToken
  • 写入 token 到本地存储

这可能导致用户看到多个授权窗口,或者产生重复 token 请求。

本 PR 修复后,同一网盘类型的首次授权流程只会执行一次,其他并发请求等待同一个结果。

测试

新增单元测试覆盖:

  • 并发首次认证时只打开一次授权页
  • 只请求一次 token
  • 只保存一次 token
  • 所有并发调用都返回同一个 access token

@cyfung1031 cyfung1031 mentioned this pull request May 11, 2026
Closed
@cyfung1031 cyfung1031 added the CloudSync Related to CloudSync label May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CloudSync Related to CloudSync

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant