库版本:2.16.0
场景:用户通过体验版 扫码进入小程序,在 app.js 中进行登陆验证,通过判断返回的值中是否存在token 来进行是否跳转。
无缓存情况下,首次扫码体验码,进入小程序后 正常跳转,但是当关掉小程序 再次扫码 就不再跳转,wx.redirectTo 返回的是 ok
App({
// 初始化完成
onLaunch: function(option) {
// 判断登录状态
this.checkLogin();
},
// 全局对象
globalData: {
userArr: null, // 平台用户信息
login: false, // 是否正在执行登录
openid: null
},
// 主机
// host: "http://10.1.10.180:8080/",
// 回调函数数组
wxReadyCallbackArr: [],
// 登陆校验
checkLogin: function() {
// 缓存
this.globalData.userArr = wx.getStorageSync("userArr");
// 检查session
wx.checkSession({
success: () => { // 有效期内
if(!this.globalData.userArr.token) {
this.wxLogin();
}
},
fail: (res) => {
// this.wxLogin();
}
})
},
// 登录
wxLogin: function(cb = null)
{
if(cb) this.wxReadyCallbackArr.push(cb);
if(this.globalData.login) return;
wx.showLoading({
title: '登陆中',
mask: true
})
// 更改状态防重复登陆
this.globalData.login = true;
return wx.login({
success: res => {
this.login(res.code);
},
fail: res => {
wx.showToast({
title: "登录失败!",
image: "/images/fail.png",
mask: true
})
}
})
},
// 登录请求
login(code) {
(async () => {
try {
let datas = {"code": code};
const res = await request("login", JSON.stringify(datas), "POST", true)
console.log(res)
let data = res.data;
if(parseInt(data.resultCode) == 200) {
this.globalData.openid = data.data.openid;
// 不存在token, 跳转进入注册申报页
if(!data.data.token) {
// 二次扫码不跳转bug
wx.redirectTo({
url: '/pages/company/reg',
success(res) {
console.log(res)
},
fail(res) {
console.log(res)
}
})
} else {
// 缓存token
let userArr = {token: data.data.token};
wx.setStorageSync("userArr", userArr);
this.globalData.userArr = userArr;
// 执行回调
if(this.wxReadyCallbackArr.length > 0) {
for(let value of this.wxReadyCallbackArr.values()) {
typeof value == "function" && value();
}
this.wxReadyCallbackArr = []; // 清空
}
this.globalData.login = false;
}
return;
}
if(data.message) {
wx.showToast({
title: data.message,
icon: "none",
mask: true
})
}
} catch (err) {
this.globalData.login = false;
}
})();
}
}
检查app.json是否注册页面、是否是tab页面需要用reLaunch或者switchTab、跳转路径是否正确
得亮代码,这样定位不出啥问题
而且看你想要的功能,就是第二次不需要跳转吧?