使用 Axios 实现路由守卫
在开发前端应用时,路由守卫是一个非常重要的概念,它保证了用户在访问某些路由之前,能够经过授权检查。在这篇文章中,我们会学习如何结合 Axios 和路由守卫来实现这一功能。接下来,我将会提供一个简单的流程,并逐步介绍每一步的代码实现。
整体流程
以下是实现 Axios 路由守卫的步骤大纲:
步骤 | 描述 |
---|---|
1 | 创建 Axios 实例并配置拦截器 |
2 | 在路由中添加守卫 |
3 | 根据返回的状态进行权限验证 |
4 | 完成实现,整合代码 |
具体实现步骤
步骤 1:创建 Axios 实例并配置拦截器
首先,我们需要创建一个 Axios 实例,并设置请求拦截器和响应拦截器,以便在请求时附带身份验证信息。
import axios from 'axios';
// 创建 Axios 实例
const axiosInstance = axios.create({
baseURL: ' // 设置 API 基础路径
timeout: 10000, // 设置请求超时时间
});
// 请求拦截器
axiosInstance.interceptors.request.use((config) => {
// 如果有 token,则将 token 加入请求头
const token = localStorage.getItem('token'); // 假设 token 存储在本地存储
if (token) {
config.headers.Authorization = `Bearer ${token}`; // 将 token 添加到请求头中
}
return config; // 返回配置
}, (error) => {
return Promise.reject(error); // 请求错误的处理
});
// 响应拦截器
axiosInstance.interceptors.response.use((response) => {
return response; // 返回响应
}, (error) => {
if (error.response.status === 401) {
// 如果未授权,触发路由守卫
// 这里可以重定向到登录页等
}
return Promise.reject(error); // 处理错误
});
步骤 2:在路由中添加守卫
在 Vue Router 中,我们可以利用全局守卫或者路由守卫来进行控制。
import { createRouter, createWebHistory } from 'vue-router';
import axiosInstance from './axiosInstance'; // 导入 Axios 实例
const routes = [
// 定义路由
];
const router = createRouter({
history: createWebHistory(),
routes,
});
// 全局前置守卫
router.beforeEach(async (to, from, next) => {
const isAuthRequired = to.matched.some(record => record.meta.requiresAuth); // 检查目标路由是否需要认证
if (isAuthRequired) {
try {
await axiosInstance.get('/check-auth'); // 每次路由跳转前请求认证接口
next(); // 授权通过,导航到目标路由
} catch (e) {
next({ name: 'Login' }); // 未授权,重定向到登录页
}
} else {
next(); // 不需要授权,直接导航
}
});
步骤 3:根据返回的状态进行权限验证
在响应拦截器中,我们已经处理了 401 状态码,在路由守卫中重定向到登录页面,确保用户的授权状态。
步骤 4:完成实现,整合代码
如此,我们实现了一个简单的 Axios 路由守卫。接下来,我们也可以通过下面的类图和 ER 图展示其中的关系。
classDiagram
class AxiosInstance {
+request()
+get()
+post()
}
class Router {
+beforeEach()
}
AxiosInstance --> Router : uses
erDiagram
User {
string username
string password
}
Token {
string token
int expiry
}
User ||--o{ Token : has
通过上述的类图和 ER 图,我们可以清晰地看到 Axios 实例与路由之间的关系。
结尾
通过这篇文章,我们完成了使用 Axios 实现路由守卫的过程。我们创建了 Axios 实例,配置了拦截器,并在路由中添加了必要的权限验证。如果你还有其他问题,欢迎随时来问!希望这对你未来的开发工作有所帮助。