This commit is contained in:
2026-04-22 23:44:57 +08:00
parent 76ac9d22a5
commit 84dc92646a
484 changed files with 9598 additions and 9135 deletions

View File

@@ -152,6 +152,45 @@
2. 无会话时会正常落回未登录分支
3. 不会因为探测型 401 把自己重新唤醒并刷爆控制台
## 4.2 2026-04-22 补充修正:公开认证入口误触发 refresh
在登录弹窗链路继续联调时,又暴露出一条更细的请求边界问题:
1. 用户处于未登录态,浏览器本地没有 access token
2. 点击“获取验证码”会调用 `sendPhoneLoginCode()`
3. `authService.ts` 复用了通用 `requestJson(...)`
4. `apiClient.ts` 在“无本地 token 且未显式关闭 refresh”时会先尝试 `POST /api/auth/refresh`
5. 若当前浏览器本来也没有 refresh session cookie就会先打出一条 `401 Unauthorized`
6. 最终表现成:验证码接口真正发送前,前端控制台先报一次 `/api/auth/refresh 401`
这条链的问题不在“验证码接口失败”,而在:
**登录前公开认证入口被错误当成了需要先补票的受保护请求。**
因此这里再补一条明确约束:
1. `sendPhoneLoginCode()`
2. `loginWithPhoneCode()`
3. `authEntry()`
4. `getAuthLoginOptions()`
5. `startWechatLogin()`
以上这些“获取登录态之前”的公开认证入口,统一显式传入:
1. `skipAuth: true`
2. `skipRefresh: true`
这样修完后:
1. 未登录用户点击“获取验证码”不会先打 `/api/auth/refresh`
2. 公开认证入口不会误带旧 token也不会制造无意义的 401 噪音
3. 真正需要 refresh 的仍然只有已拿到登录态后的受保护请求
本次补修的定向验证:
1. `npx vitest run src/services/authService.test.ts`
2. `npm run check:encoding`
---
## 5. 本批次完成后的实际收益