fix(login): 恢复手机号快捷登录功能,避免带旧Token导致失败

- 将 login.tsx 和 register.tsx 中登录请求从封装的 request 工具改回 Taro.request
- 取消登录请求中自动注入 Authorization 头,避免携带过期/旧 token 导致认证失败
- 调整登录接口响应数据解析,适配 Taro.request 的数据结构
- fetchUserInfo 改回使用 Taro.request,手动携带 Authorization 头部
- 添加全局 getPhoneNumber 调用冷却机制,防止频繁调用导致微信报错
- 登录页新增手机授权冷却
This commit is contained in:
2026-07-16 17:01:17 +08:00
parent ce1e2bd4dd
commit 46298c011f
9 changed files with 322 additions and 45 deletions

35
src/utils/phoneAuth.ts Normal file
View File

@@ -0,0 +1,35 @@
/**
* getPhoneNumber 全局频率控制
*
* 微信原生层对 getPhoneNumber API 有调用频率限制,短时间内多次调用会报:
* [渲染层错误] invoke getPhoneNumber too frequently
*
* 本模块提供模块级(跨页面)的时间戳锁,配合各页面的 useRef 同步锁 + 条件渲染使用。
*/
/** 上次 getPhoneNumber 回调触发的时间戳ms */
let lastPhoneAuthTime = 0
/** 冷却期ms在此期间不允许再次触发 getPhoneNumber */
const PHONE_AUTH_COOLDOWN = 3000
/**
* 检查当前是否在冷却期内。
* 在渲染 getPhoneNumber 按钮前调用此函数,若在冷却期内则不渲染 openType。
*/
export function isPhoneAuthCoolingDown(): boolean {
if (lastPhoneAuthTime === 0) return false
return Date.now() - lastPhoneAuthTime < PHONE_AUTH_COOLDOWN
}
/** 记录一次 getPhoneNumber 回调已触发(在 onGetPhoneNumber 回调入口调用) */
export function markPhoneAuthCalled(): void {
lastPhoneAuthTime = Date.now()
}
/** 获取冷却期剩余时间ms用于设置 unlock 延迟 */
export function getPhoneAuthCooldownRemaining(): number {
if (lastPhoneAuthTime === 0) return 0
const remaining = PHONE_AUTH_COOLDOWN - (Date.now() - lastPhoneAuthTime)
return remaining > 0 ? remaining : 0
}