当前位置:首页 > VUE

vue实现登录权限

2026-03-28 07:05:12VUE

Vue 实现登录权限的方法

路由守卫控制权限

在 Vue 项目中,可以通过路由守卫(Navigation Guards)来实现登录权限控制。在 router/index.js 中配置全局前置守卫,检查用户是否已登录。

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

路由配置中需要为需要权限的页面添加 meta 字段:

{
  path: '/dashboard',
  component: Dashboard,
  meta: { requiresAuth: true }
}

状态管理保存登录状态

使用 Vuex 或 Pinia 来管理用户的登录状态和权限信息。在登录成功后,将用户信息和 token 保存在状态管理中。

// Vuex 示例
const store = new Vuex.Store({
  state: {
    user: null,
    token: null
  },
  mutations: {
    setUser(state, user) {
      state.user = user
    },
    setToken(state, token) {
      state.token = token
    }
  }
})

登录接口处理

在登录页面中,处理登录逻辑并将 token 保存到本地存储和状态管理中。

vue实现登录权限

methods: {
  async handleLogin() {
    try {
      const response = await loginApi(this.form)
      localStorage.setItem('token', response.data.token)
      this.$store.commit('setToken', response.data.token)
      this.$router.push('/dashboard')
    } catch (error) {
      console.error(error)
    }
  }
}

权限指令控制界面元素

对于页面中的具体元素,可以使用自定义指令来控制显示权限。

Vue.directive('permission', {
  inserted(el, binding, vnode) {
    const { value } = binding
    const permissions = vnode.context.$store.state.user.permissions
    if (!permissions.includes(value)) {
      el.parentNode && el.parentNode.removeChild(el)
    }
  }
})

使用方式:

vue实现登录权限

<button v-permission="'admin'">管理员按钮</button>

动态路由加载

根据用户权限动态加载可访问的路由。在用户登录后,根据权限获取可访问的路由配置并动态添加到路由实例中。

async function loadRoutes() {
  const permissions = await getUserPermissions()
  const allowedRoutes = filterRoutes(allRoutes, permissions)
  router.addRoutes(allowedRoutes)
}

Token 过期处理

在请求拦截器中检查 token 是否过期,如果过期则跳转到登录页面。

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

退出登录处理

在退出登录时清除本地存储和状态管理中的用户信息。

methods: {
  logout() {
    localStorage.removeItem('token')
    this.$store.commit('setToken', null)
    this.$store.commit('setUser', null)
    this.$router.push('/login')
  }
}

通过以上方法组合使用,可以实现完整的登录权限控制流程,包括路由权限、界面元素权限和 API 请求权限的控制。

标签: 权限vue
分享给朋友:

相关文章

vue 实现图钉

vue 实现图钉

实现图钉效果的步骤 在Vue中实现图钉(固定位置)效果,可以通过CSS的position: sticky属性或监听滚动事件动态修改元素样式。以下是两种常见方法: 方法一:使用CSS的posi…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…

实现vue模板解析

实现vue模板解析

Vue 模板解析的基本原理 Vue 的模板解析是将模板字符串转换为渲染函数的过程。核心步骤包括模板编译、AST 生成、优化和代码生成。 模板编译阶段 Vue 使用 vue-template-comp…

vue实现的页面

vue实现的页面

Vue 实现的页面示例 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是一个简单的 Vue 页面实现示例,包含基本的结构和功能。 安装 Vue 通过 CDN 引入 V…

vue实现前端路由

vue实现前端路由

Vue 实现前端路由的方法 Vue 可以通过 Vue Router 实现前端路由管理。以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router: n…

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式实现,具体选择取决于项目需求和路由管理方式。 使用 Vue Router 实现单页应用(SPA)切换 Vue Route…