
1. vue3 使用路由守卫跳转到登录页
在 Vue 3 中使用 Vue Router 进行路由守卫来判断用户是否登录,并在未登录时跳转到登录页面,是一个常见的需求。
这可以通过全局前置守卫 beforeEach 来实现。
下面是一个详细的步骤指南,帮助你在 Vue 3 项目中配置和使用路由守卫。
1.1. 安装 Vue Router
首先,确保你已经安装了 Vue Router。
如果还没有安装,可以通过 npm 或 yarn 安装:
npm install vue-router@next
或
yarn add vue-router@next
1.2. 配置路由
在项目的 src 目录下创建一个 router 文件夹,并在其中创建一个 index.js 文件来配置路由。
import { createRouter, createWebHistory } from'vue-router'
importHomefrom'../views/Home.vue'
importAboutfrom'../views/About.vue'
importLoginfrom'../views/Login.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: { requiresAuth: true } // 标记需要登录的路由
},
{
path: '/about',
name: 'About',
component: About,
meta: { requiresAuth: true } // 标记需要登录的路由
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () =>import('../views/NotFound.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
exportdefault router1.3. 注册路由
在项目的主文件 main.js 或 main.ts 中注册路由:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')1.4. 创建登录页面组件
在 src/views 目录下创建一个 Login.vue 文件,编写登录页面的模板和逻辑。
<template>
<div class="login">
<h1>登录</h1>
<form @submit.prevent="handleLogin">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" v-model="username" required />
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" v-model="password" required />
</div>
<button type="submit">登录</button>
</form>
</div>
</template>
<script>
export default {
data() {
return {
username: '',
password: ''
}
},
methods: {
handleLogin() {
// 这里可以添加登录逻辑,例如调用 API 进行身份验证
// 假设登录成功
localStorage.setItem('isAuthenticated', 'true')
this.$router.push({ name: 'Home' })
}
}
}
</script>
<style scoped>
.login {
max-width: 400px;
margin: 0 auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 5px;
}
</style>1.5. 配置全局前置守卫
在 router/index.js 中添加全局前置守卫 beforeEach,用于判断用户是否登录,并在未登录时跳转到登录页面。
import { createRouter, createWebHistory } from'vue-router'
importHomefrom'../views/Home.vue'
importAboutfrom'../views/About.vue'
importLoginfrom'../views/Login.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: { requiresAuth: true } // 标记需要登录的路由
},
{
path: '/about',
name: 'About',
component: About,
meta: { requiresAuth: true } // 标记需要登录的路由
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () =>import('../views/NotFound.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
// 全局前置守卫
router.beforeEach((to, from, next) => {
const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
const isAuthenticated = localStorage.getItem('isAuthenticated') === 'true'
if (requiresAuth && !isAuthenticated) {
next({ name: 'Login' })
} else {
next()
}
})
exportdefault router1.6. 测试
启动你的 Vue 3 项目,尝试访问需要登录的页面(例如 / 或 /about),如果你未登录,应该会被重定向到登录页面 /login。
登录成功后,你应该能够访问这些页面。
1.7. 退出登录
在用户退出登录时,清除认证状态并重定向到登录页面。
你可以在 Logout.vue 组件中实现这一点:
<template>
<div>
<h1>退出登录</h1>
<button @click="logout">退出</button>
</div>
</template>
<script>
export default {
methods: {
logout() {
localStorage.removeItem('isAuthenticated')
this.$router.push({ name: 'Login' })
}
}
}
</script>1.8. 总结
通过以上步骤,你可以在 Vue 3 项目中配置和使用 Vue Router 路由守卫来判断用户是否登录,并在未登录时跳转到登录页面。
这有助于保护你的应用,确保只有经过身份验证的用户才能访问受保护的页面。









