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

uniapp 实现路由拦截,权限或者登录控制

背景:

  项目需要判断token,即是否登录,登录之后权限 

参考uni-app官方:

为了兼容其他端的跳转权限控制,uni-app并没有用vue router路由,而是内部实现一个类似此功能的钩子:拦截器,由其统一管理

拦截器说明:拦截器的适用场景非常多,比如路由拦截,权限引导等,所以可以采用拦截器来实现

uni.addInterceptor(STRING, OBJECT) | uni-app官网uni-app,uniCloud,serverless,uni.addInterceptor(STRING, OBJECT),uni.removeInterceptor(STRING)icon-default.png?t=N7T8https://uniapp.dcloud.net.cn/api/interceptor.html#%E6%8B%A6%E6%88%AA%E5%99%A8%E7%9A%84%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF%E9%9D%9E%E5%B8%B8%E5%A4%9A-%E6%AF%94%E5%A6%82%E8%B7%AF%E7%94%B1%E6%8B%A6%E6%88%AA-%E6%9D%83%E9%99%90%E5%BC%95%E5%AF%BC%E7%AD%89%E3%80%82

新建一个routeIntercept.js

调用uni.addInterceptor(),添加拦截,在main.js引入这个文件。那么在每一个跳转页面时,这个拦截()=>{}方法勾子就会被调用。

/*
* @Description: routeIntercept
* @Version: v1.0
* @Author: LANI
* @Date: 2024-01-27 13:01
*/
let needLogin = ["/pages/sys/login/index","/pages/sys/workbench/index",
]
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器console.log(item, 'router list item')uni.addInterceptor(item, {invoke(e) { // 调用前拦截//获取用户的tokenconsole.log(e, '|-调用前拦截,routerjs invoke')const token = localStorage.getItem('token')//获取当前页面路径(即url去掉"?"和"?"后的参数)console.log(token, '|-调用前拦截,如果token为空就拦截,不允许访问router index token')const url = e.url.split('?')[0]console.log(url, '|-调用前拦截,router index url')console.log(needLogin.includes(url))    if (needLogin.includes(url) && token == '') {uni.showToast({title: '请先登录',icon: 'none'})uni.navigateTo({url: "/pages/login/login"})return false}return true},fail(err) { // 失败回调拦截console.log(err);},})
})

main.js

在new Vue()之前引入上面的js

import '@/uview-ui/libs/router/routeIntercept.js';

页面进入时执行拦截器。

相关文章:

  • 力扣931. 下降路径最小和
  • DC-活动目录域服务(23国赛真题)
  • LVGL部件2
  • Git安装,Git镜像,Git已安装但无法使用解决经验
  • 万户 ezOFFICE DocumentEdit_unite.jsp SQL注入漏洞复现
  • 酒鬼酒2024年展望:稳发展动能,迈入恢复性增长轨道
  • 箱形图之美:Pyecharts库的高级参数解析与炫酷样式实践
  • MySQL行格式原理深度解析
  • SouthLeetCode-打卡24年01月第2周
  • ChatGPT升级界面支持中文
  • 一文速学-selenium高阶操作连接已存在浏览器
  • el-tree 组件 只搜索到第二级时默认展示第二级所有选项
  • Git学习笔记(第10章):自建代码托管中心GitLab
  • 使用CUDA过程中出现异常
  • 机电制造ERP软件有哪些品牌?哪家的机电制造ERP系统比较好
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CSS中外联样式表代表的含义
  • ES6 学习笔记(一)let,const和解构赋值
  • Git初体验
  • golang 发送GET和POST示例
  • Octave 入门
  • Promise初体验
  • quasar-framework cnodejs社区
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 从tcpdump抓包看TCP/IP协议
  • 搭建gitbook 和 访问权限认证
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何选择开源的机器学习框架?
  • 事件委托的小应用
  • 线性表及其算法(java实现)
  • 小李飞刀:SQL题目刷起来!
  • MPAndroidChart 教程:Y轴 YAxis
  • PostgreSQL之连接数修改
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • $jQuery 重写Alert样式方法
  • (WSI分类)WSI分类文献小综述 2024
  • (二)原生js案例之数码时钟计时
  • (二)丶RabbitMQ的六大核心
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十一)c52学习之旅-动态数码管
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • **CI中自动类加载的用法总结
  • ./configure,make,make install的作用
  • .gitignore文件—git忽略文件
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net mvc总结
  • .NET 的程序集加载上下文
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @Async注解的坑,小心
  • @JoinTable会自动删除关联表的数据
  • @RequestBody的使用