Vue项目中常见问题(52)导航守卫的判断与用户登录操作

本文详细介绍了在Vue项目中如何使用导航守卫防止已登录用户返回登录页面。通过全局前置守卫实现路由跳转判断,根据store中的token判断用户登录状态,若token失效则清理并重新登录。此外,还讨论了刷新页面后用户信息丢失的问题及解决方案。
摘要由CSDN通过智能技术生成

目录

问题1:用户已经登录了,用户就不应该还能回到login页面

解决方法:导航守卫

那么什么是导航守卫呢?

举例子:方便理解记忆

全局守卫:你的项目当中,只要发生路由变化,守卫就能监听到

 项目中的应用:

 解决问题1:


问题1:用户已经登录了,用户就不应该还能回到login页面

所以路由的跳转不是你想怎么跳就怎么跳的

解决方法:导航守卫

那么什么是导航守卫呢?

我们去到vue的官网中:导航守卫 | Vue Router

正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。

举例子:方便理解记忆

导航守卫:

导航:表示路由正在发生改变,进行路由跳转

守卫:你把它当做'紫禁城护卫'

全局守卫:

举例子: 紫禁城[皇帝、太后、妃子],紫禁城大门守卫全要排查

路由独享守卫:

举例子:紫禁城[皇帝、太后、妃子],是相应的[皇帝、太后、妃子]路上的守卫

组件内守卫: 你去皇帝屋子

举例子:比如你已经到皇帝屋子外面了(或者进去了) 这块区域的守卫

全局守卫:你的项目当中,只要发生路由变化,守卫就能监听到

分为:全局前置守卫、全局解析守卫、全局后置守卫,说白了就是执行的时间不同

全局前置守卫:跳转之前

全局后置守卫:跳转之后

可以使用vue-router提供的路由守卫实现判断用户是否登录。具体步骤如下: 1. 在router.js文件导入需要使用的路由守卫,如beforeEach。 2. 在需要进行登录验证的路由组件添加meta字段,用于标记该路由需要进行登录验证。 3. 在router.js文件使用beforeEach路由守卫判断用户是否登录,如果已登录则放行,否则跳转到登录页面。 以下是示例代码: router.js ``` import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const router = new Router({ routes: [ { path: '/', name: 'home', component: () => import('@/views/Home.vue') }, { path: '/login', name: 'login', component: () => import('@/views/Login.vue') }, { path: '/profile', name: 'profile', component: () => import('@/views/Profile.vue'), meta: { requireAuth: true // 标记该路由需要登录验证 } } ] }) router.beforeEach((to, from, next) => { // 判断该路由是否需要登录验证 if (to.matched.some(record => record.meta.requireAuth)) { // 判断用户是否已登录 if (!isLogin()) { // 未登录,跳转到登录页面 next({ name: 'login' }) } else { // 已登录,放行 next() } } else { // 不需要登录验证,放行 next() } }) // 判断用户是否已登录 function isLogin () { // 判断用户是否已登录的逻辑 } export default router ``` Profile.vue ``` <template> <div> <h1>Profile</h1> </div> </template> <script> export default { name: 'Profile' } </script> ``` Login.vue ``` <template> <div> <h1>Login</h1> </div> </template> <script> export default { name: 'Login' } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值