参考文档:uni.addInterceptor(STRING, OBJECT) | uni-app官网
/router/permission.js
/**
* @description 自定义路由拦截
*/
// 白名单
import whiteList from "./whiteList.js"
import store from "@/store"
export default async function() {
const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab', 'navigateBack']
// 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
list.forEach(item => {
uni.addInterceptor(item, {
invoke(e) {
// 获取要跳转的页面路径(url去掉"?"和"?"后的参数)
const url = e.url && e.url?.split('?')[0];
// 先有url 再判断不在白名单的路径并且没有token
if (url && !whiteList.includes(url) && !store.state.token) {
// 退出登录的操作
uni.reLaunch({
url: '/pages/outside/login'
});
}
},
fail(err) { // 失败回调拦截
// console.log(err)
}
})
})
}
App.vue
import routerPermission from "@/router/permission.js"
onLaunch() {
//#ifdef APP-PLUS || MP-WEIXIN
routerPermission()
//#endif
}
效果图