|
1、auto.js
/** * @description 权限存储函数 */ const authorizationKey = 'accessToken'
export function getAuthorization() { return uni.getStorageSync(authorizationKey) }
export function setAuthorization(authorization) { return uni.setStorageSync(authorizationKey, authorization) }
export function removeAuthorization(authorization) { return uni.removeStorageSync(authorizationKey) }
2、permission.js
/** * @description 自定义路由拦截 */
import { getAuthorization } from '@/utils/auth.js' import oneKeyLogin from '@/common/oneKeyLogin.js' // 白名单 const whiteList = [ '/', // 注意入口页必须直接写 '/' { pattern: /^\/pages\/list.*/ }, // 支持正则表达式 { pattern: /^\/pages\/guidePage.*/ }, // 支持正则表达式 '/pages/index/entrance', '/pages/orders/orders', '/pages/historicalCall/historicalCall', '/pages/mine/mine', { pattern: /^\/pages\/login\/*/ } ]
export default async function() { const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab'] // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器 list.forEach(item => { uni.addInterceptor(item, { invoke(e) { // 获取要跳转的页面路径(url去掉"?"和"?"后的参数) const url = e.url.split('?')[0] // console.log('url', url,e)
// 判断当前窗口是白名单,如果是则不重定向路由 let pass if (whiteList) { pass = whiteList.some((item) => { if (typeof (item) === 'object' && item.pattern) { return item.pattern.test(url) } return url === item }) }
// 不是白名单并且没有token if (!pass && !getAuthorization()) { // uni.showToast({ // title: '请先登录', // icon: 'none' // }) // uni.navigateTo({ // url: "/pages/login/login" // }) if(plus.os.name==="Android"){ // 调用一键登录 uni.closeAuthView() oneKeyLogin() }else{ uni.navigateTo({ url:"/pages/login/login" }) } return false } return e }, fail(err) { // 失败回调拦截 console.log(err) } }) }) }
3、在APP.vue引入使用
import routingIntercept from '@/utils/permission.js'
来源:https://www.cnblogs.com/chenjianbao/p/16470821.html |