当前位置:首页 > VUE

vue实现登陆拦截

2026-01-20 14:34:40VUE

路由守卫实现登录拦截

在Vue项目中,可以通过路由守卫(Navigation Guards)实现登录拦截功能。路由守卫分为全局守卫、路由独享守卫和组件内守卫,通常使用全局前置守卫router.beforeEach进行登录验证。

// router/index.js
import router from './router'
import { getToken } from '@/utils/auth' // 假设有获取token的工具函数

router.beforeEach((to, from, next) => {
  const isLogin = getToken() // 检查是否存在token

  if (to.meta.requiresAuth && !isLogin) {
    next({
      path: '/login',
      query: { redirect: to.fullPath } // 记录跳转前的路由
    })
  } else {
    next()
  }
})

路由配置添加元信息

在路由配置中,通过meta字段标记需要登录验证的路由:

vue实现登陆拦截

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

登录状态管理

建议使用Vuex集中管理登录状态,与路由守卫配合使用:

// store/modules/user.js
const state = {
  token: localStorage.getItem('token') || ''
}

const mutations = {
  SET_TOKEN(state, token) {
    state.token = token
    localStorage.setItem('token', token)
  },
  CLEAR_TOKEN(state) {
    state.token = ''
    localStorage.removeItem('token')
  }
}

登录跳转处理

在登录组件中处理登录成功后的跳转逻辑:

vue实现登陆拦截

// Login.vue
methods: {
  handleLogin() {
    login(this.form).then(res => {
      this.$store.commit('SET_TOKEN', res.data.token)
      const redirect = this.$route.query.redirect || '/'
      this.$router.push(redirect)
    })
  }
}

白名单配置

对于无需登录的页面(如登录页、404页等),可以配置白名单优化验证逻辑:

const whiteList = ['/login', '/404']

router.beforeEach((to, from, next) => {
  if (whiteList.includes(to.path)) {
    return next()
  }
  // ...其他验证逻辑
})

响应拦截器配合

可以在axios响应拦截器中处理token过期情况:

service.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      store.commit('CLEAR_TOKEN')
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

标签: vue
分享给朋友:

相关文章

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用户…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue compile 实现

vue compile 实现

Vue 编译实现原理 Vue 的编译过程将模板字符串转换为渲染函数,主要分为解析、优化和代码生成三个阶段。 解析阶段(Parse) 将模板字符串转换为抽象语法树(AST)。Vue 使用正则表达式和有…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…