/** * 认证相关API接口(小程序版本 - 使用模拟数据) */ // 模拟用户数据库 const users = new Map() // 模拟验证码存储 (phone -> {code, expireTime}) const smsCodes = new Map() // 模拟本机号码(实际开发中应该通过运营商API获取) const MOCK_PHONE_NUMBER = '18138887353' // 生成6位随机验证码 function generateSmsCode() { return Math.random().toString().substr(2, 6) } // 验证手机号格式 function validatePhone(phone) { const phoneRegex = /^1[3-9]\d{9}$/ return phoneRegex.test(phone) } // 检查验证码是否有效 function isValidSmsCode(phone, code) { const smsData = smsCodes.get(phone) if (!smsData) return false const now = Date.now() const expired = now > smsData.expireTime if (expired) { smsCodes.delete(phone) return false } return smsData.code === code } // 模拟网络延迟 const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)) // 获取本机号码 export const getPhoneNumber = async () => { await delay(500) // 模拟网络延迟 console.log('模拟API: 获取本机号码') return { code: 200, message: '获取成功', data: { phone: MOCK_PHONE_NUMBER, maskedPhone: `${MOCK_PHONE_NUMBER.slice(0, 3)}****${MOCK_PHONE_NUMBER.slice(-4)}` } } } // 发送验证码 export const sendSmsCode = async (phone) => { await delay(800) // 模拟网络延迟 console.log('模拟API: 发送验证码', { phone }) // 验证手机号格式 if (!validatePhone(phone)) { throw new Error('手机格式不正确') } // 生成验证码 const code = generateSmsCode() const expireTime = Date.now() + 10 * 60 * 1000 // 10分钟有效期 // 存储验证码 smsCodes.set(phone, { code, expireTime }) console.log(`模拟API: 验证码已发送到 ${phone}: ${code}`) return { code: 200, message: '验证码发送成功', data: { phone, // 开发阶段返回验证码,生产环境不应返回 debugCode: code } } } // 验证码登录 export const smsLogin = async (phone, code) => { await delay(1000) // 模拟网络延迟 console.log('模拟API: 验证码登录', { phone, code }) // 验证手机号格式 if (!validatePhone(phone)) { throw new Error('手机格式不正确') } // 验证验证码 if (!isValidSmsCode(phone, code)) { throw new Error('验证码错误') } // 检查用户是否存在 let user = users.get(phone) const isNewUser = !user if (isNewUser) { // 新用户自动注册 user = { id: 'user_' + Date.now(), phone, nickname: `用户${phone.slice(-4)}`, avatar: '', registerTime: Date.now(), lastLoginTime: Date.now() } users.set(phone, user) console.log('模拟API: 新用户注册', user) } else { // 老用户更新最近登录时间 user.lastLoginTime = Date.now() users.set(phone, user) console.log('模拟API: 老用户登录', user) } // 清除使用过的验证码 smsCodes.delete(phone) // 生成token const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2) return { code: 200, message: isNewUser ? '注册登录成功' : '登录成功', data: { token, user, isNewUser } } } // 一键登录 export const oneClickLogin = async (phone) => { await delay(1200) // 模拟网络延迟 console.log('模拟API: 一键登录', { phone }) // 验证手机号格式 if (!validatePhone(phone)) { throw new Error('手机格式不正确') } // 检查用户是否存在 let user = users.get(phone) const isNewUser = !user if (isNewUser) { // 新用户自动注册 user = { id: 'user_' + Date.now(), phone, nickname: `用户${phone.slice(-4)}`, avatar: '', registerTime: Date.now(), lastLoginTime: Date.now() } users.set(phone, user) console.log('模拟API: 一键登录新用户注册', user) } else { // 老用户更新最近登录时间 user.lastLoginTime = Date.now() users.set(phone, user) console.log('模拟API: 一键登录老用户', user) } // 生成token const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2) return { code: 200, message: isNewUser ? '注册登录成功' : '登录成功', data: { token, user, isNewUser } } } // 检查登录状态 export const checkLoginStatus = async (token) => { await delay(300) // 模拟网络延迟 console.log('模拟API: 检查登录状态', { token }) if (!token) { throw new Error('未登录') } // 简单的token验证(实际项目中应该更复杂) return { code: 200, message: '已登录', data: { valid: true } } } // 获取用户信息 export const getUserInfo = async () => { await delay(400) // 模拟网络延迟 console.log('模拟API: 获取用户信息') const token = uni.getStorageSync('userToken') if (!token) { throw new Error('未登录') } // 返回模拟用户信息 return { code: 200, message: '获取成功', data: { id: 'user_' + Date.now(), phone: MOCK_PHONE_NUMBER, nickname: `用户${MOCK_PHONE_NUMBER.slice(-4)}`, avatar: '', registerTime: Date.now() - 30 * 24 * 60 * 60 * 1000, // 30天前注册 lastLoginTime: Date.now() } } }