美文网首页
Uniapp路由拦截

Uniapp路由拦截

作者: itfitness | 来源:发表于2022-08-19 17:12 被阅读0次

目录

前言

有些APP需要登录才能看到其中的一些页面,这时候就需要对页面进行判断拦截

效果展示

实现步骤

新建utils目录,在该目录下新建auth.js和permission.js

1.新建auth.js
/**
 * @description 权限存储函数
 */
const authorizationKey = 'Authorization'

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
import { getAuthorization } from '@/utils/auth'

// 白名单
const whiteList = [
  '/', // 注意入口页必须直接写 '/'
  '/pages/Login/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)

        // 判断当前窗口是白名单,如果是则不重定向路由
        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"
          })
          return false
        }
        return e
      },
      fail(err) { // 失败回调拦截
        console.log(err)
      }
    })
  })
}
3.App.vue中使用
import routingIntercept from '@/utils/permission.js'
    export default {
        onLaunch: function() {
            console.log('App Launch');
            // 对路由进行统一拦截,实现路由导航守卫 router.beforeEach 功能
            routingIntercept()
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        }
    }

相关文章

  • Uniapp路由拦截

    目录 前言 有些APP需要登录才能看到其中的一些页面,这时候就需要对页面进行判断拦截 效果展示 实现步骤 新建ut...

  • vue+axios 实现登录拦截权限验证

    vue+axios 前端实现登录拦截(路由拦截、http拦截) 一、路由拦截 登录拦截逻辑 第一步:路由拦截 首先...

  • vue+axios 实现登录拦截权限验证

    vue+axios 前端实现登录拦截(路由拦截、http拦截) 一、路由拦截 登录拦截逻辑第一步:路由拦截首先在定...

  • vue接口拦截

    接口拦截 路由拦截 接口拦截应该指的是 http 请求拦截路由拦截是 vue 这种框架里的拦截登录拦截是一个需求,...

  • 『ios』路由拦截器实现和一些思路

    我们带着几个问题来看这篇。1.什么是路由拦截器,路由拦截器的用处。2.路由拦截器是如何实现的。3.路由拦截器在项目...

  • Vue 路由拦截、http拦截

    一、路由拦截 登录拦截逻辑 第一步:路由拦截 首先在定义路由的时候就需要多添加一个自定义字段requireAuth...

  • (十六)Vue中的路由拦截

    简单来说有全拦截,也有单独路由拦截。本节主要是全拦截

  • 记录封装好的axios

    拦截封装 路由封装

  • uniapp请求+uView2.0请求封装

    uniapp开发基础模板,对uniapp请求进行了简单封装,实现请求拦截及响应处理,同时引用了 uView2.0 ...

  • 路由拦截

    这是路由拦截(导航守卫) to是代表要去哪里 form是代表要离开的路由 next是表示下一个 router.be...

网友评论

      本文标题:Uniapp路由拦截

      本文链接:https://www.haomeiwen.com/subject/wvsugrtx.html