初次接触微信小程序,到现在经历了两个项目,所幸一直用的都是vue,学习陡度较低,在这里记录一下自己在微信小程序里遇到过的问题。
1.app.js的执行顺序低于index.js。所以如果你在app.js写微信授权和登录的获取用户信息的话,index.js获取到的用户信息是null,当然你也可以将微信登陆挡在index。js中,但是这种方法不适用有分享功能的微信小程序,所以,我的办法是:
在app。js中将微信登陆封装成函数模块,然后再index。js中调用,需要注意的是,封装的函数需要做一个判断,判断本地存储有无用户信息,有则return,无则执行方法。
logins: function (success) {
let _this = this
if (wx.getStorageSync("userid")) {
_this.globalData.userid= wx.getStorageSync("userid");
_this.globalData.userInfo= wx.getStorageSync("userInfo");
success();
console.log('有用户信息,不登陆')
return;
}
console.log('没有用户信息,登陆')
// 登录
wx.login({
success: function (res) {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
getApp().globalData.code = res.code;
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
_this.globalData.userInfo = res.userInfo
wx.setStorage({
key: 'userInfo',
data: res.userInfo,
})
console.log(getApp().globalData.userInfo)
let code = getApp().globalData.code
console.log(code, 11111111111)
wx.request({
url: 'http://',
data: {
act: 'wx_login',
op: 'resOpenId',
code: code,
encrypted_data: res.encryptedData,
iv: res.iv
},
method: "POST",
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: function (res) {
console.log('登陆成功', res.data.res.userid)
wx.setStorage({
key: 'userid',
data: res.data.res.userid,
})
getApp().globalData.userid = res.data.res.userid;
success();
}, fail: function (res) {
console.log(res, '登陆失败')
wx.showToast({
title: '登陆失败',
icon:none
})
}
})
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (_this.userInfoReadyCallback) {
_this.userInfoReadyCallback(res)
console.log('callback')
}
},
fail: function (err) {
console.log("未授权");
wx.showModal({
title: '系统提示',
content: '您还未对《小游戏》授权,是否立即前往授权?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
wx.openSetting({
success: (res) => {
if (res.authSetting['scope.userInfo'] == true) {
//已授权
_this.logins(success);
} else {
//用户任然未授权
}
}
})
} else if (res.cancel) {
console.log('用户点击取消')
//用户任然未授权
}
}
})
}
})
}
});
}
溜了溜了
2 .