当前位置: 首页 > news >正文

uniapp通过uni.addInterceptor实现路由拦截

注:此拦截不能首次拦截路由跳转的方法('switchTab', 'navigateTo', 'reLaunch', 'redirectTo'),拦截request请求api可以

1. app.vue 代码

	import { onLaunch} from '@dcloudio/uni-app'import permission  from './utils/permission'onLaunch(()=>{console.log('我是APP蓝翅')uni.request({url: 'https://apifoxmock.com/m1/4728220-0-default/api/user/getBanner',method: 'GET',success: (res)=>{console.log('res')}})permission()})

2. permission 代码

const checkAuth = function() {// 拦截器的API列表const apiList = ['switchTab', 'navigateTo', 'reLaunch', 'redirectTo']// 白名单列表const whitePath = ['/pages/logic/logic']apiList.map(item => {uni.addInterceptor(item, {invoke(args) {console.log(args)// 取出当前路由地址const path = args.url.split('?')[0]// 此处通过token来模拟是否登录,具体的根据项目来判断const token = uni.getStorageSync('token')console.log(token)// 判断是否在白名单内if (whitePath.includes(path)) {console.log('不需要登录')return } else {if (token) {console.log('登录')// 登录了return} else {console.log('没有登录')// 未登录uni.navigateTo({url: `/pages/logic/logic?redirectTo=${encodeURIComponent(args.url)}`})return false}}}})})
}export default checkAuth

3. 登录简单实现代码

<template><view class="page-wrap">用户名:<input type="text" border="surround" v-model="username" /><up-button type="primary" @click="login">登录</up-button></view>
</template><script setup>import {ref} from 'vue'import {onShow,onLoad} from '@dcloudio/uni-app'const username = ref('')const redirectPath = ref('')onLoad((p)=>{console.log(p)})onShow((props) => {console.log(props)console.log(redirectPath.value)console.log(getCurrentPages())const page = getCurrentPages()let currentPage = page[page.length - 1]redirectPath.value = currentPage?.$page?.options?.redirectTo || ''})const login = () => {if (username.value) {uni.setStorageSync('token', username)console.log((redirectPath.value))uni.redirectTo({url: decodeURIComponent(redirectPath.value),fail: (err) => {console.log(err)uni.switchTab({url: decodeURIComponent(redirectPath.value),})}})} else {uni.showToast({title: '请输入用户名'})}}
</script><style scoped>.page-wrap {padding: 20rpx;}
</style>

相关文章:

  • 条款07:为多态基类声明一个virtual析构函数
  • SL1680 SoC本地运行DeepSeek R1 1.5B大模型
  • vue将“00:00:09“的时间转换为秒,将时分秒hh:mm:ss的格式转换为秒,
  • 搭建 vue 项目环境详细步骤
  • qt+mingw64+cmake+libqrencode项目编译和搭建成功记录
  • Jsp技术入门指南【四】详细讲解jsp与Servlet的对比和Jsp生命周期和工作原理
  • VBA技术资料MF293:不打开工作簿获取值
  • 【运维学习】lvs + keepalived + 主从dns 项目搭建
  • 运筹学之指派问题(原始匈牙利算法以及KM算法)
  • 深度学习 从入门到精通 day_02
  • Google Test 与 Google Mock:C++ 测试与模拟的完美结合
  • 于 Jupyter 天地,借 NumPy 之手编织数据锦缎
  • 管家婆财贸ERP BB106.采购开票选单批量过滤
  • Linux之 grep、find、ls、wc 命令
  • [数据结构]哈希表
  • 3DMAX粒子流样条线生成器PFSpliner使用方法详解
  • 【AI News | 20250417】每日AI进展
  • 金蝶云星空API接口调试postman
  • Mybtis和Mybatis-Plus区别
  • 4月17日星期四今日早报简报微语报早读
  • 玉渊谭天:美方多渠道主动接触中方希望谈关税
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 乌副总理:乌美签署矿产协议
  • 马上评|什么才是地方文旅宣传的正确姿势
  • 年轻人的事业!6家上海人工智能企业畅想“模范生”新征程
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作