当前位置:首页 > VUE

vue实现登录访问控制

2026-02-25 00:40:08VUE

Vue 实现登录访问控制的方法

路由守卫(Route Guards)

在 Vue Router 中配置全局前置守卫 beforeEach,检查用户是否登录。未登录用户访问受限路由时,重定向到登录页。

// router/index.js
router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 假设 token 存储在 localStorage
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

路由元信息(Route Meta Fields)

为需要登录的路由添加 meta 字段标记,便于路由守卫统一处理。

// router/index.js
{
  path: '/dashboard',
  component: Dashboard,
  meta: { requiresAuth: true }
}

状态管理(Vuex/Pinia)

使用状态管理工具存储用户登录状态,避免频繁读取 localStorage。

// store/auth.js (Vuex 示例)
state: {
  isLoggedIn: !!localStorage.getItem('token')
},
mutations: {
  setLoginState(state, status) {
    state.isLoggedIn = status
  }
}

HTTP 拦截器

在 axios 拦截器中检查 token,自动处理未授权请求。

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

动态路由加载

根据用户权限动态加载路由,实现更细粒度的控制。

// 根据用户角色过滤路由
function filterRoutes(routes, role) {
  return routes.filter(route => {
    if (route.meta && route.meta.roles) {
      return route.meta.roles.includes(role)
    }
    return true
  })
}

Token 过期处理

定期检查 token 有效期,或在请求失败时刷新 token。

// token 过期检查示例
function checkTokenExpiry() {
  const token = localStorage.getItem('token')
  if (token && isExpired(token)) {
    store.commit('logout')
  }
}

组件级权限控制

在组件中使用计算属性或自定义指令控制元素显示。

// 自定义权限指令
Vue.directive('permission', {
  inserted(el, binding) {
    if (!store.getters.hasPermission(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

服务端验证

前端控制只是辅助手段,关键权限校验必须由服务端完成。

// API 请求必须携带 token
axios.get('/api/data', {
  headers: { 'Authorization': `Bearer ${token}` }
})

实现完整的登录访问控制需要前后端配合,前端主要负责用户体验层面的控制,真正的安全校验应由后端完成。定期清理本地存储的敏感信息,确保安全性。

vue实现登录访问控制

标签: 访问控制vue
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keywor…

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-s…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue 绑定实现

vue 绑定实现

Vue 绑定实现 Vue 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…