当前位置:首页 > VUE

vue如何实现登录拦截

2026-01-22 04:39:30VUE

Vue 实现登录拦截的方法

使用路由守卫(Route Guards)

在 Vue 中,可以通过路由守卫(beforeEach)实现登录拦截。路由守卫会在路由跳转前执行,用于检查用户是否已登录。

// router/index.js
import router from './router'
import store from './store'

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.getters.isAuthenticated
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!isAuthenticated) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

定义路由元信息

在路由配置中,可以通过 meta 字段标记哪些路由需要登录权限。

// router/index.js
const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: { requiresAuth: true }
  },
  {
    path: '/login',
    component: Login
  }
]

结合 Vuex 管理登录状态

使用 Vuex 存储和管理用户的登录状态,确保全局可访问。

// store/index.js
const store = new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null
  },
  mutations: {
    setAuth(state, payload) {
      state.isAuthenticated = payload.isAuthenticated
      state.user = payload.user
    }
  },
  getters: {
    isAuthenticated: state => state.isAuthenticated
  }
})

登录逻辑实现

在登录组件中,调用登录接口并更新 Vuex 状态,成功后跳转到目标页面。

// Login.vue
methods: {
  async login() {
    try {
      const response = await authService.login(this.form)
      this.$store.commit('setAuth', {
        isAuthenticated: true,
        user: response.user
      })
      const redirect = this.$route.query.redirect || '/'
      this.$router.push(redirect)
    } catch (error) {
      console.error('Login failed:', error)
    }
  }
}

退出登录处理

在退出登录时,清除 Vuex 中的状态并跳转到登录页。

// Logout.vue
methods: {
  logout() {
    this.$store.commit('setAuth', {
      isAuthenticated: false,
      user: null
    })
    this.$router.push('/login')
  }
}

使用导航守卫检查 Token

如果使用 Token 验证,可以在路由守卫中检查 Token 是否有效。

vue如何实现登录拦截

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!token) {
      next('/login')
    } else {
      // 验证 Token 有效性
      verifyToken(token).then(isValid => {
        if (isValid) {
          next()
        } else {
          next('/login')
        }
      })
    }
  } else {
    next()
  }
})

通过以上方法,可以灵活实现 Vue 中的登录拦截功能,确保未登录用户无法访问受保护的路由。

标签: 如何实现vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。 基本…