wx.setStorageSync获取openid失败

博客指出部分手机会出现问题,其修改办法是将异步操作改成同步操作,并使用setStorage。

有些手机会出问题
修改办法:异步改成同步
使用setStorage

// app.js const MiniProgramDataManager = require('./data/MiniProgramDataManager'); App({ onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) // 初始化数据管理器 this.initDataManager(); // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId } }) // 获取用户信息 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 wx.getUserInfo({ success: res => { // 可以将 res 发送给后台解码出 unionId this.globalData.userInfo = res.userInfo // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } } }) } } }) }, // 初始化数据管理器 initDataManager: function() { // 创建数据管理器实例 const baseUrl = 'http://192.168.1.11:8080'; // 实际API地址 this.globalData.dataManager = new MiniProgramDataManager(baseUrl); // 初始化数据管理器 this.globalData.dataManager.initialize().catch(error => { console.error('数据管理器初始化失败:', error); wx.showToast({ title: '数据加载失败,请重试', icon: 'none', duration: 2000 }); }); }, // 检查微信登录状态 checkWechatLogin: function() { // 检查本地存储中是否有userId const userId = wx.getStorageSync('userId'); if (userId) { console.log('用户已登录,userId:', userId); this.globalData.needLogin = false; } else { console.log('用户未登录'); this.globalData.needLogin = true; } return !this.globalData.needLogin; }, // 添加登录方法,保存用户信息 login: function(userInfo) { // 保存用户信息到全局数据 this.globalData.userInfo = userInfo; this.globalData.needLogin = false; // 保存用户ID到本地存储 wx.setStorageSync('userId', userInfo.id); wx.setStorageSync('role', userInfo.role); wx.setStorageSync('name', userInfo.name); // 保存登录状态到本地存储 wx.setStorageSync('loginInfo', { isLoggedIn: true, userInfo: userInfo }); }, // 添加微信登录方法 wechatLogin: function() { return new Promise((resolve, reject) => { wx.login({ success: res => { if (res.code) { // 发送code到后台获取用户信息 wx.request({ url: this.globalData.baseUrl + '/users/wechat-login', method: 'POST', data: { code: res.code }, success: loginRes => { if (loginRes.data.status === 200) { // 登录成功 const userInfo = loginRes.data.data; this.login(userInfo); resolve(userInfo); } else if (loginRes.data.status === 404) { // 用户不存在,需要注册 resolve({ openid: loginRes.data.openid, needRegister: true }); } else { // 其他错误 reject(loginRes.data.text || '微信登录失败'); } }, fail: err => { reject('网络错误,请稍后重试'); } }); } else { reject('获取微信授权失败'); } }, fail: err => { reject('微信登录失败'); } }); }); }, // 显示登录选择弹窗 showLoginModal: function(callback) { wx.showModal({ title: '应用名称', content: '请选择登录方式', confirmText: '微信登录', cancelText: '账号登录', success: res => { if (res.confirm) { // 用户点击了微信登录 wx.showLoading({ title: '登录中...', }); this.wechatLogin() .then(result => { wx.hideLoading(); if (result.needRegister) { // 需要注册,跳转到注册页面并传递openid wx.navigateTo({ url: `/pages/register/register?openid=${result.openid}` }); } else { // 登录成功,执行回调 if (typeof callback === 'function') { callback(true); } } }) .catch(error => { wx.hideLoading(); wx.showToast({ title: error, icon: 'none', duration: 2000 }); }); } else { // 用户点击了账号登录 wx.navigateTo({ url: '/pages/login/login' }); } } }); }, // 检查登录状态,如果未登录则显示登录选择弹窗 checkLoginStatus: function(pageObj) { if (!this.checkWechatLogin()) { console.log('未登录,显示登录选择弹窗'); this.showLoginModal(() => { // 登录成功后的回调,可以刷新页面或执行其他操作 if (pageObj && typeof pageObj.onLoad === 'function') { pageObj.onLoad(pageObj.options); } }); return false; } return true; }, globalData: { userInfo: null, dataManager: null, needLogin: true, baseUrl: 'http://192.168.1.11:8080' } })在全局app中注册
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值