fix(login): 恢复手机号快捷登录功能,避免带旧Token导致失败
- 将 login.tsx 和 register.tsx 中登录请求从封装的 request 工具改回 Taro.request - 取消登录请求中自动注入 Authorization 头,避免携带过期/旧 token 导致认证失败 - 调整登录接口响应数据解析,适配 Taro.request 的数据结构 - fetchUserInfo 改回使用 Taro.request,手动携带 Authorization 头部 - 添加全局 getPhoneNumber 调用冷却机制,防止频繁调用导致微信报错 - 登录页新增手机授权冷却
This commit is contained in:
35
src/utils/phoneAuth.ts
Normal file
35
src/utils/phoneAuth.ts
Normal 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
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
* 必须在页面中渲染 <PrivacyModal /> 并绑定本管理器。
|
||||
*/
|
||||
|
||||
type PrivacyResolve = (result: { event: 'agree' | 'disagree'; button: string }) => void
|
||||
type PrivacyResolve = (result: { event: 'agree' | 'disagree'; buttonId: string }) => void
|
||||
|
||||
let currentResolve: PrivacyResolve | null = null
|
||||
let showCallback: ((show: boolean) => void) | null = null
|
||||
@@ -31,16 +31,22 @@ export const privacyManager = {
|
||||
showCallback?.(true)
|
||||
},
|
||||
|
||||
/** 隐私协议授权流程已结束,隐藏弹窗 */
|
||||
hide() {
|
||||
currentResolve = null
|
||||
showCallback?.(false)
|
||||
},
|
||||
|
||||
/** 用户点击同意(由 open-type=agreePrivacyAuthorization 的 button 触发) */
|
||||
agree() {
|
||||
currentResolve?.({ event: 'agree', button: 'agree' })
|
||||
currentResolve?.({ event: 'agree', buttonId: 'privacy-agree-btn' })
|
||||
currentResolve = null
|
||||
showCallback?.(false)
|
||||
},
|
||||
|
||||
/** 用户点击拒绝 */
|
||||
disagree() {
|
||||
currentResolve?.({ event: 'disagree', button: 'disagree' })
|
||||
currentResolve?.({ event: 'disagree', buttonId: 'privacy-disagree-btn' })
|
||||
currentResolve = null
|
||||
showCallback?.(false)
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user