Vue中的导航守卫

这篇博客介绍了如何在Vue.js应用中实现路由权限管理,利用Vuex存储token并结合导航守卫进行权限判断。当用户有token时,允许访问除登录页外的其他页面;反之,无token时则重定向至登录页或404页面。同时,展示了两种不同的守卫实现方式,帮助开发者更好地理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

讲的不好的地方,多多理解,

单单看看下面的讲解,可能是看不懂我在说什么,因为需要一点前置知识:vuex,路由,vue脚手架,token

路由权限:访问

是否有token,token是令牌,因为http跳转,传输是没有状态的,可别拿着后退,前进抬杠,那个是浏览器自带的,具体我也没有了解那么深,(HTTP无状态协议对于交互性场景是没有记忆能力的。前一句网络搜索的,想了解http无协议状态,直接搜索一下,http无协议算是浏览器早期的设定),token算是通行的令牌,身份。


有token,说明它已经登陆过了,如果它特意在url地址栏跳转到登录页,就安排它跳转到主页,
如果不是跳转到登录页,直接放行,随便它自由跳转

没有token,说明没有登录,只能去404页面,或者登录页面,放行,
想要去其他页面,直接强制到登录页

导航守卫直接封装到一个文件里面,src/permission.js(你们随意,我是记录一下自己学的知识)

判断有没有token,再判断是不是登录页面,或者白名单
import router from '@/router'  //路由,因为组件化,模块化开发,分的很细
import store from '@/store'  //来自vuex
router.beforeEach((to, from, next) => {
  //to:即将要进入的目标路由对象(准备到哪个页面),
//from:当前导航正要离开的路由(准备到哪个页面的前一个页面),
//next:放行(让它到指定的页面),这里将页面不太正确,应该是路由,毕竟是路由跳转
  if (store.getters.token) {   //getters,快捷访问,store是vuex里面知识,这里不做讲解
    // 有 token 去登录页 => 首页
    if (to.path === '/login') {
      next('/')  // 这里的/是我router文件中已经做了处理,路由做了重定向
    } else {
      // 有 token 不是去登录页 => 放行
      next()
    }
  } else {
    const whiteList = ['/login', '/404']   //白名单
    if (whiteList.indexOf(to.path) !== -1) {
      // 没 token 允许不登录就查看的, 放行
      next()
    } else {
      // 没 token 其他页面,跳转登录页
      next('/login')
    }
  }
})

第二种写法:
上面写法对于新手不便于理解
const token = store.getters.token
  const url = to.path
  const whiteList = ['/login', '/404']  //白名单
  // 有 token 去登陆页 => 首页
  if (token && url === '/login') {
    next('/')
  }

  // 有 token 不去登录页 => 放行
  if (token && url !== '/login') {
    next()
  }

  // 无 token 在白名单 => 放行  ,includes数组的一个方法
  if (!token && whiteList.includes(url)) {
    next()
  }

  // 无 token 不在白名单 => 登录页
  if (!token && !whiteList.includes(url)) {
    next('/login')
  }


小知识点:  
import router from './store'  //针对的是,
//另一个页面有export default router 导出router,
//可能这个文件不止只导出一个,但是我们只要其中一些

import 'router' //针对的是,另一个页面的文件内容内容全部都导入进来,相当与复制粘贴进来

讲解直接贴代码上,有点费时间,我还特别怕别人不喜欢,哈哈,随便记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值