当前位置:首页 > 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并跳转到目标页面:

// 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:

// 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并重定向到登录页:

vue路由登录实现

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

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

相关文章

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue前端分页怎么实现

vue前端分页怎么实现

前端分页实现方法 在Vue中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginatedD…

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…