vue页面登录守卫

本文介绍如何使用JavaScript在Vue.js应用中实现基于session的登录状态路由跳转,确保未登录用户只能访问登录、注册页面,已登录用户则正常流转。通过检查本地存储的登录信息来决定用户的导航行为。

举例:

router.beforeEach((to,from,next)=>{
  var itemx=sessionStorage.getItem("data") // 登录的时候进行一次本地存储,以有无此存储内容进行判断

// '/deng'  代表为登录界面
// '/zhu'   代表为注册页面
// '/'      代表为登录页面
// to.path  代表为所进行前往的页面路径 (可在控制台里面打印出)

  if(itemx == null || itemx==""){
    if(to.path == '/deng'  || to.path == '/zhu' || to.path == '/'){
      next()
    }else{
      next('/');
    }
  }else{
    next()
  }
  })

Vue.js中,使用 `vue-router` 可以实现页面路由守卫,以控制用户的导航行为,例如身份验证、权限检查、页面访问控制等。以下是实现页面路由守卫的详细方法和指南。 ### 配置 `vue-router` 并定义路由 首先,需要安装并配置 `vue-router`。通过 `npm install vue-router` 安装 `vue-router`,然后在项目中创建路由实例并配置路由规则。例如: ```javascript // /src/router/index.js import Vue from 'vue'; import Router from 'vue-router'; import Home from '@/views/Home.vue'; import Login from '@/views/Login.vue'; import Dashboard from '@/views/Dashboard.vue'; Vue.use(Router); const routes = [ { path: '/', name: 'Home', component: Home, }, { path: '/login', name: 'Login', component: Login, }, { path: '/dashboard', name: 'Dashboard', component: Dashboard, meta: { requiresAuth: true }, // 使用路由元信息标识需要授权的路由 [^4] }, ]; const router = new Router({ mode: 'history', routes, }); export default router; ``` ### 全局前置守卫 `beforeEach` 在全局范围内,可以使用 `beforeEach` 守卫来拦截所有导航请求,并根据路由的 `meta` 字段判断用户是否具备访问权限。例如,检查用户是否登录: ```javascript // 在路由实例中添加全局前置守卫 router.beforeEach((to, from, next) => { const isAuthenticated = localStorage.getItem('token'); // 假设使用 localStorage 存储登录状态 if (to.meta.requiresAuth && !isAuthenticated) { next('/login'); // 如果目标路由需要授权且用户未登录,则重定向到登录页面 [^1] } else { next(); // 否则允许继续导航 } }); ``` ### 路由独享守卫 `beforeEnter` 除了全局守卫,还可以为特定路由配置独享守卫。例如,在 `/dashboard` 路由中添加 `beforeEnter` 守卫,实现更细粒度的控制: ```javascript { path: '/dashboard', name: 'Dashboard', component: Dashboard, meta: { requiresAuth: true }, beforeEnter: (to, from, next) => { const isAuthenticated = localStorage.getItem('token'); if (isAuthenticated) { next(); } else { next('/login'); } }, } ``` ### 组件内守卫 `beforeRouteEnter` 和 `beforeRouteLeave` 在组件内部,可以使用 `beforeRouteEnter` 和 `beforeRouteLeave` 来控制进入或离开该组件时的导航行为。例如,在 `Dashboard.vue` 中添加组件内守卫: ```javascript // Dashboard.vue export default { name: 'Dashboard', beforeRouteEnter(to, from, next) { const isAuthenticated = localStorage.getItem('token'); if (isAuthenticated) { next(); } else { next('/login'); } }, beforeRouteLeave(to, from, next) { // 可以用于确认用户是否真的要离开页面 const answer = window.confirm('您确定要离开此页面吗?'); if (answer) { next(); } else { next(false); } }, }; ``` ### 使用 `this.$router` 和 `this.$route` 在组件中,可以通过 `this.$router` 访问全局路由实例,用于编程式导航(如 `this.$router.push('/login')`),而 `this.$route` 则提供了当前路由的信息(如 `params`、`query` 等)[^3]。 ### 总结 通过上述方法,可以在 Vue.js 应用中实现页面路由守卫,包括全局守卫、路由独享守卫和组件内守卫。这些守卫可以用于身份验证、权限控制、页面访问限制等场景,确保应用的安全性和用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值