小程序项目停服维护判断+页面登录验证,判断登录权限,未登录跳登录去授权,登录跳过继续
思路:每次进入页面的时候先发请求,判断是否处于停服维护状态,是则跳停服维护的页面,显示停服维护中,否则判断token信息是否存在,进而跳转不同页面
可以自己封装一个专门的js,取个名字叫routerFilter.js,名字随意
var https = 'https://xxxx.com';
var utils=require("./util.js");
function routerCheck(pageObj) { // 停服判断
if (pageObj.onShow) {
let _onShow = pageObj.onShow;
// 使用onLoad的话需要传递options
pageObj.onShow = function () {
wx.request({
url:https+'/Weixin/Index/checkServer',
data:{},
method:'POST',
success: function(res){
if(res.data.code == '20000'){
if(!wx.getStorageSync('token')){//没有token信息,去换open_id
// 登录
wx.login({
success: res => {
let code = res.code
console.log(res)
utils.ajax('/Weixin/Auth/getMinCode',{//请求后端返回token,
code:code
}).then(res=>{
if(res.data.code==20000){
wx.setStorageSync('open_id', res.data.data.openid);
wx.setStorageSync('token', res.data.data.token);
wx.setStorageSync('session_key', res.data.data.session_key);
var token = wx.getStorageSync('token');
if(!token || token == ''){//如果没有token,说明是新用户,如果是去首页,因为首页未登录也可以看,所以就直接去首页,如果是去非首页,需要用户信息才能看的,则要去注册
let currentInstance = getPageInstance();
if(currentInstance.route=='pages/index/index'){
_onShow.call(currentInstance);
}else{
wx.navigateTo({
url: "/pages/login/login"
});
}
}else{//有token,则直接往下进行,去它该去的页面
// 获取当前页面
let currentInstance = getPageInstance();
_onShow.call(currentInstance);
}
}
})
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
}else{
let currentInstance = getPageInstance();
_onShow.call(currentInstance);
}
}else{//停服
wx.redirectTo({
url: "/packageA/pages/weihu/weihu"
});
}
},
fail: function(res){
console.log(res)
}
})
}
}
return pageObj;
}
// 获取当前页面
function getPageInstance() {
var pages = getCurrentPages();
return pages[pages.length - 1];
}
exports.routerCheck = routerCheck;
在页面中使用
const filter = require('../../utils/routerFilter.js');
Page(filter.routerCheck({
data:{},
onLoad(){
},
onShow(){
}
...
})
关于小程序授权登录可参考另一篇小程序授权获取头像昵称登录