完成距离预校验
This commit is contained in:
@@ -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 })
|
||||
|
||||
Reference in New Issue
Block a user