帮我写一个 vue 项目 路由权限控制
时间: 2023-05-14 12:06:49 浏览: 123
当用户登录后,我们可以在前端将用户的 token 存储在本地,然后在每次请求时将 token 发送到后端进行验证,以确保用户已经登录并且有权限访问该页面。
在 Vue 中,我们可以使用 vue-router 来实现路由权限控制。具体步骤如下:
1. 安装 vue-router
```
npm install vue-router --save
```
2. 创建路由配置文件
在 src 目录下创建一个 router 目录,并在该目录下创建一个 index.js 文件,用于配置路由信息。
```
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home.vue'
import About from '@/views/About.vue'
import Login from '@/views/Login.vue'
Vue.use(Router)
const router = new Router({
routes: [
{
path: '/',
name: 'home',
component: Home,
meta: {
requiresAuth: true // 需要登录才能访问
}
},
{
path: '/about',
name: 'about',
component: About,
meta: {
requiresAuth: true // 需要登录才能访问
}
},
{
path: '/login',
name: 'login',
component: Login
}
]
})
// 路由守卫
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
const token = localStorage.getItem('token')
if (!token) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next()
}
})
export default router
```
在上面的代码中,我们定义了三个路由:Home、About 和 Login。其中 Home 和 About 都需要登录才能访问,Login 则是登录页面。
我们在路由配置中使用了 meta 字段来标记该路由是否需要登录才能访问。在路由守卫中,我们判断当前路由是否需要登录,如果需要,则检查本地是否有 token,如果没有,则跳转到登录页面。
3. 在 main.js 中引入路由配置文件
```
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App)
}).$mount('#app')
```
在上面的代码中,我们将路由配置文件引入,并将其注入到 Vue 实例中。
4. 在需要登录的组件中使用路由守卫
在需要登录的组件中,我们可以使用路由守卫来判断用户是否已经登录。例如,在 Home.vue 组件中,我们可以这样写:
```
<template>
<div>
<h1>Home</h1>
</div>
</template>
<script>
export default {
name: 'Home',
beforeRouteEnter (to, from, next) {
const token = localStorage.getItem('token')
if (!token) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
}
}
</script>
```
在上面的代码中,我们使用了 beforeRouteEnter 钩子函数来判断用户是否已经登录。如果没有登录,则跳转到登录页面。
这样,我们就完成了 Vue 项目的路由权限控制。
阅读全文