小程序静默登录-登录拦截实现方案【全局loginPromis加页面拦截】
warning:
这篇文章距离上次修改已过198天,其中的内容可能已经有所变动。
在小程序中实现静默登录,可以通过全局变量loginPromise来处理登录请求,并在页面加载时进行拦截。以下是实现的示例代码:
// app.js 或全局的 utils.js
// 登录拦截器
function loginInterceptor(options) {
// 检查用户登录状态
if (!wx.getStorageSync('userInfo')) {
// 用户未登录,返回一个Promise
return new Promise((resolve, reject) => {
wx.login({
success: res => {
// 调用登录接口,获取 code
wx.request({
url: '你的登录接口',
data: {
code: res.code
},
success: res => {
// 登录成功,存储用户信息
wx.setStorageSync('userInfo', res.data.userInfo);
resolve(res.data);
},
fail: err => {
// 登录失败,拒绝Promise
reject(err);
}
});
}
});
});
} else {
// 用户已登录,直接返回Promise
return Promise.resolve({ userInfo: wx.getStorageSync('userInfo') });
}
}
// 在 app 的 onLaunch 或 onShow 中调用
App({
onLaunch: function () {
this.login();
},
login: function () {
this.globalData.loginPromise = loginInterceptor();
},
globalData: {
loginPromise: null
}
});
// 在页面的 onShow 中调用
Page({
onShow: function () {
// 等待登录结果
getApp().globalData.loginPromise.then(res => {
console.log('登录成功', res);
// 登录成功后的操作
}).catch(err => {
console.log('登录失败', err);
// 登录失败后的操作
});
}
});
在这个例子中,我们定义了一个loginInterceptor函数,它会检查用户的登录状态。如果用户未登录,它会发起一个登录请求,并在成功后存储用户信息。如果用户已登录,它会直接返回一个已解决的Promise。在app.js或全局的utils.js中,我们将loginInterceptor函数在app的生命周期钩子中调用,并将返回的Promise存储在globalData.loginPromise中。在页面的onShow生命周期钩子中,我们等待globalData.loginPromise的结果,并根据结果执行相应的操作。这样,无论用户在哪个页面进入小程序,都能在页面加载时进行登录拦截。
评论已关闭