diff --git a/pages/login/index.vue b/pages/login/index.vue index 8a4a6b4..eb5acfc 100644 --- a/pages/login/index.vue +++ b/pages/login/index.vue @@ -174,7 +174,8 @@ import { ref, computed, onMounted, onUnmounted } from 'vue' import { onLoad } from '@dcloudio/uni-app' import { request } from '../../utils/request' -import { wechatLogin, douyinLogin, bindPhone, bindDouyinPhone, getUserStats, getPointsBalance, sendSmsCode, smsLogin } from '../../api/appUser' +import { wechatLogin, douyinLogin, bindPhone, bindDouyinPhone, getUserStats, getPointsBalance, sendSmsCode, smsLogin, getUserInfo } from '../../api/appUser' +import { authRequest } from '../../utils/request' import { vibrateShort } from '@/utils/vibrate.js' const loading = ref(false) @@ -401,16 +402,36 @@ function onGetPhoneNumber(e) { const inviterCode = uni.getStorageSync('inviter_code') const data = await wechatLogin(res.code, inviterCode) - saveUserData(data) - - // 绑定手机号 (仅当后端反馈未绑定时调用) + // 检查后端返回的数据中是否已包含手机号 const isBound = data.phone || data.phone_number || data.mobile + console.log('[DEBUG] 微信登录返回数据手机号状态:', isBound ? '已绑定' : '未绑定', data) + + // 如果未绑定手机号,则调用绑定接口 if (!isBound) { try { + console.log('[DEBUG] 开始绑定手机号') await bindPhone(data.user_id, phoneCode) - } catch (e) {} + // 绑定成功后,强制从服务器获取最新的用户信息(不读取缓存) + try { + const updatedUserInfo = await authRequest({ url: '/api/app/users/info', method: 'GET' }) + console.log('[DEBUG] 绑定后从服务器获取用户信息:', updatedUserInfo) + // 如果返回了用户信息,合并到 data 对象 + if (updatedUserInfo) { + Object.assign(data, updatedUserInfo) + } + } catch (err) { + console.warn('[DEBUG] 绑定后获取用户信息失败:', err) + } + } catch (e) { + console.error('[DEBUG] 绑定手机号失败:', e) + } + } else { + console.log('[DEBUG] 微信登录已包含手机号,跳过绑定') } + // 保存用户数据(此时应该包含手机号) + saveUserData(data) + // 后台获取数据 fetchExtraData(data.user_id) @@ -493,15 +514,22 @@ function saveUserData(data) { if (data.invite_code) uni.setStorageSync('invite_code', data.invite_code) if (data.mobile) uni.setStorageSync('last_login_mobile', data.mobile) - // 检查是否已绑定手机号 + // 检查是否已绑定手机号(检查所有可能的字段名) const hasPhone = data.mobile || data.phone || data.phone_number - console.log('[DEBUG] 检查手机号绑定状态:', hasPhone ? '已绑定' : '未绑定') + console.log('[DEBUG] 检查手机号绑定状态:', { + mobile: data.mobile, + phone: data.phone, + phone_number: data.phone_number, + hasPhone: hasPhone ? '已绑定' : '未绑定' + }) // 根据实际是否有手机号来设置 phone_bound 状态 if (hasPhone) { uni.setStorageSync('phone_bound', true) + console.log('[DEBUG] 已设置 phone_bound = true') } else { uni.setStorageSync('phone_bound', false) + console.log('[DEBUG] 已设置 phone_bound = false') } // 如果返回了 openid,则存储 (短信登录现在也会返回已关联的 openid) @@ -526,6 +554,8 @@ function saveUserData(data) { loginMode.value = 'sms' } }) + } else { + console.log('[DEBUG] 已检测到手机号,正常登录流程') } } diff --git a/utils/checkPhone.js b/utils/checkPhone.js index 033a7da..60a969f 100644 --- a/utils/checkPhone.js +++ b/utils/checkPhone.js @@ -6,14 +6,23 @@ export function checkPhoneBound() { // 获取用户信息 const userInfo = uni.getStorageSync('user_info') || {} + console.log('[checkPhoneBound] 检查用户信息:', { + mobile: userInfo.mobile, + phone: userInfo.phone, + phone_number: userInfo.phone_number, + userInfoKeys: Object.keys(userInfo) + }) + const mobile = userInfo.mobile || userInfo.phone || userInfo.phone_number || '' // 如果已绑定手机号,直接返回 if (mobile) { + console.log('[checkPhoneBound] 已检测到手机号,允许通过:', mobile) return true } // 未绑定手机号,显示提示并跳转 + console.warn('[checkPhoneBound] 未检测到手机号,提示用户绑定') uni.showModal({ title: '需要绑定手机号', content: '为了账号安全,请先绑定手机号',