当前位置:首页 > 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字段标记需要登录验证的路由:

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')
  }
}

登录跳转处理

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

// 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过期情况:

vue实现登陆拦截

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中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template> &…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…