当前位置:首页 > VUE

vue路由登录实现

2026-03-08 14:01:20VUE

路由守卫实现登录验证

在Vue项目中,可以通过路由守卫(navigation guards)实现登录验证逻辑。全局前置守卫router.beforeEach是最常用的方式,在路由跳转前进行拦截。

// router/index.js
import router from './router'
import { getToken } from '@/utils/auth'

router.beforeEach((to, from, next) => {
  const hasToken = getToken()

  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!hasToken) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

路由配置添加元信息

在路由定义中通过meta字段标记需要认证的路由:

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

登录成功处理

登录成功后需要存储token并跳转到目标页面:

vue路由登录实现

// Login.vue
methods: {
  handleLogin() {
    login(this.loginForm).then(res => {
      setToken(res.data.token)
      this.$router.push(this.$route.query.redirect || '/')
    })
  }
}

持久化token存储

使用localStoragecookie存储token,并封装工具方法:

// utils/auth.js
export function getToken() {
  return localStorage.getItem('token')
}

export function setToken(token) {
  localStorage.setItem('token', token)
}

export function removeToken() {
  localStorage.removeItem('token')
}

请求拦截器配置

在axios请求拦截器中添加token:

vue路由登录实现

// utils/request.js
import { getToken } from './auth'

service.interceptors.request.use(
  config => {
    if (getToken()) {
      config.headers['Authorization'] = 'Bearer ' + getToken()
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

响应拦截器处理token过期

在axios响应拦截器中处理401未授权情况:

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

退出登录实现

清除token并重定向到登录页:

// UserDropdown.vue
methods: {
  handleLogout() {
    logout().then(() => {
      removeToken()
      this.$router.push('/login')
    })
  }
}

标签: 路由vue
分享给朋友:

相关文章

vue为啥能实现监听

vue为啥能实现监听

Vue 实现监听的原理 Vue 的监听能力主要基于其响应式系统,该系统通过数据劫持和依赖收集实现。当数据变化时,系统能自动触发视图更新或执行回调函数。 核心机制:Object.definePrope…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue底层实现

vue底层实现

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

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…