全局前置守卫解读

一、全局前置守卫是什么?

        全局守卫:简单说在项目中任意路由切换都会触发的钩子函数。

        全局前置守卫:是在组件初始化时候调用的,每次路由切换的时候,全局前置守卫都会调用,因此在全局守卫中,我们总是需要设置一些什么。全局前置守卫(不只是全局前置守卫)包含三个参数:to、from、next()

        第一个参数 to :指的是跳转后的路由 --- 我要去哪儿;

        第二个参数 from : 指的是从哪个路由开始跳转 --- 我从哪儿来;

        第三个参数 next() : 它是一个函数,表示路由可以往下进行跳转 --- 我是守门员;

二、设置全局前置守卫

1.引入路由文件

        既然是路由守卫,首先要把路由文件引入到当前文件

 2.调用全局前置守卫函数

        调用 router.beforeEach()  => {  } 函数,开始书写全局前置守卫代码;

        这里要注意参数:to、from、next

3.开始设置全局前置守卫

有token

        既然现在考虑到了路由跳转,首先应该想到用户有没有登录?通过token唯一标识,我们很容易能够知道用户登录没有。有token -- 已登录;没有token -- 未登录(跳转到登录页面让用户登录)。(小提示:这里的token和username已经调取用户信息接口保存在仓库userStore中)

路由前置守卫

        如果token存在,此时进一步判断:用户是否从登录页面登录后获取到了用户信息、获取到了用户信息中的token?如果是,好的通过!调用next() 函数路由到首页:next({ path: '/' }) 。

        如果不是,那么此时得到的token是之前登录过保存在本地存储localStorage中的,虽然有token,但是没有用户信息,调用next函数跳转后什么也没有。此时不仅仅要考虑到是否有token,还要考虑到是否有用户信息。那么我们可以通过用户信息中的username字段去判断是否已经调用用户信息接口获取到了用户信息。有用户信息,调动next()函数进行跳转;如果username不存在,说明没有用户信息,需要先调取接口获取,然后再调用next函数放行;

        需要注意的是:此时的next() 放行,括号里面应当写上需要前往的路由:next(to.path) 或者 next({ ...to });这是因为在登录后点击刷新时,保证刷新后的路由跳转是当前点击的路由。因为存在异步路由时,获取到了用户信息但是异步路由还没有加载完毕,导致刷新后出现空白。

刷新后路由跳转了,但是异步路由还没加载完毕,所以显示空白

        另外需要注意这里catch里面的代码。try...catah...不做过多解释。发现catch里面调用了退出登录的函数。这是为什么呢?因为获取用户信息失败,需要用户退出重新登录获取用户信息,并且next函数放行的路由是通往登录界面的。

没有token

         到这里一直分析的是用户有token的情况,如果没有token呢?事情变得非常简单 --- 没有token说明用户没有登录,直接调用next到登录页面让用户登录即可。

        next({ path: '/login', query: { redirect: to.path }})      

 结尾小tips:可以通过进度条 nprogress 明晰路由跳转喔~

 nprogress.start() --- 开始;nprogress.done() --- 结束

        

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
路由全局前置守卫是在每次路由导航跳转时自动触发的回调函数。在Vue中,可以通过创建一个路由实例并调用其beforeEach()方法来声明全局前置守卫。在守卫函数中,可以通过参数to和from来获取当前导航的目标路由和来源路由。在守卫函数中,可以使用next()方法来控制路由的跳转。 根据引用\[1\]和引用\[2\]的代码,可以看出全局前置守卫的逻辑如下: 1. 如果存在token(登录状态),则执行步骤1。 2. 如果目标路由是登录页或注册页,则阻止路由跳转。 3. 如果存在用户信息name,则直接跳转到目标路由。 4. 如果不存在用户信息name,则尝试通过仓库获取用户信息。 5. 如果获取用户信息出错,则说明token已失效,通知仓库进行用户退出,并跳转到登录页。 6. 如果不存在token,则直接跳转到目标路由。 根据引用\[3\]的描述,当页面刷新时,会进入导航守卫。如果存在登录状态(token),则会进入步骤1。如果进入登录注册之外的其他页面,则会进入步骤2。由于刷新时仓库信息丢失,无法获取到仓库中的用户信息name,因此会进入步骤4。在步骤4中,会通知仓库获取用户信息,如果获取出错,则会进入步骤5,即token失效,通知仓库进行用户退出,并跳转到登录页。 总结起来,路由全局前置守卫的作用是在路由导航跳转前进行一些逻辑判断和处理,例如检查登录状态、获取用户信息等,以确保用户在跳转路由时的正确性和安全性。 #### 引用[.reference_title] - *1* [Vue-导航守卫——全局前置守卫](https://blog.csdn.net/weixin_63836026/article/details/124758560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [路由全局前置守卫判断token失效](https://blog.csdn.net/LIMITSSS/article/details/126114803)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tomtomgogo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值