完成距离预校验

This commit is contained in:
2026-06-12 13:03:13 +08:00
parent 81f3e1d3b6
commit 72d29d4b68
7 changed files with 6060 additions and 3054 deletions

View File

@@ -501,11 +501,69 @@ const handleLogin = async () => {
saveDeliverySession(result.token, result.userInfo, result.deliveryInfo)
// 加载 ak_users 映射Supabase Auth ID -> 业务用户 ID
// 优先从 result.userInfo.id 获取业务用户 ID直接写入缓存
// 只有 userInfo.id 不存在时,才调用 loadCurrentAkUser
let akUserIdFromLogin = ''
try {
await loadCurrentAkUser()
console.log('[Login] ak_users 映射加载成功')
} catch (akErr) {
console.warn('[Login] ⚠️ ak_users 映射加载失败(不影响登录):', akErr)
// 尝试从 userInfo.id 获取业务用户 ID
if (result.userInfo != null && result.userInfo.id != null && String(result.userInfo.id).length > 0) {
const candidateId = String(result.userInfo.id)
console.log('[Login] 从 result.userInfo.id 获取到 ID:', candidateId)
// 判断是否是 Supabase Auth ID通过长度和格式判断
// Supabase Auth ID 通常是 UUID 格式,业务用户 ID 也是 UUID 格式
// 最可靠的方式是尝试写入后验证
akUserIdFromLogin = candidateId
// 写入缓存
uni.setStorageSync('ak_user_id', akUserIdFromLogin)
uni.setStorageSync('user_id', akUserIdFromLogin)
uni.setStorageSync('current_ak_user', JSON.stringify({
id: akUserIdFromLogin,
auth_id: result.userInfo.auth_id ?? '',
username: result.userInfo.username ?? '',
email: result.userInfo.email ?? '',
role: result.userInfo.role ?? ''
}))
console.log('[Login] 从 userInfo.id 写入 ak_user_id 成功:', akUserIdFromLogin)
}
} catch (extractErr) {
console.warn('[Login] 从 userInfo.id 提取失败:', extractErr)
}
// 如果 userInfo.id 没有有效 ID才调用 loadCurrentAkUser
if (akUserIdFromLogin == null || String(akUserIdFromLogin).length == 0) {
try {
const profile = await loadCurrentAkUser()
akUserIdFromLogin = profile.id
console.log('[Login] ak_users 映射加载成功akUserId:', profile.id)
console.log('[Login] 缓存已写入: ak_user_id =', profile.id)
} catch (akErr) {
console.warn('[Login] ⚠️ ak_users 映射加载失败:', akErr)
// 如果 user_id 已有缓存,尝试用它兜底
const cachedUserId = uni.getStorageSync('user_id')
if (cachedUserId != null && String(cachedUserId).length > 0) {
console.log('[Login] 使用 user_id 缓存兜底:', cachedUserId)
uni.setStorageSync('ak_user_id', cachedUserId)
uni.setStorageSync('current_ak_user', JSON.stringify({ id: cachedUserId }))
akUserIdFromLogin = String(cachedUserId)
}
}
}
// 最终验证 ak_user_id 必须有值
const finalAkUserId = uni.getStorageSync('ak_user_id')
console.log('[Login] 最终 ak_user_id:', finalAkUserId)
console.log('[Login] 最终 current_ak_user:', uni.getStorageSync('current_ak_user'))
if (finalAkUserId == null || String(finalAkUserId).length == 0) {
console.error('[Login] ❌ ak_user_id 最终为空,输出详细调试信息')
console.error('[Login] result.userInfo:', JSON.stringify(result.userInfo))
console.error('[Login] result.deliveryInfo:', JSON.stringify(result.deliveryInfo))
console.error('[Login] user_id 缓存:', uni.getStorageSync('user_id'))
console.error('[Login] auth_user_id 缓存:', uni.getStorageSync('auth_user_id'))
console.error('[Login] user_info 缓存:', uni.getStorageSync('user_info'))
throw new Error('业务账号映射加载失败,请联系管理员')
}
const authResult = await requireDeliveryAuth({ redirectOnFail: false, toastOnFail: false })