返回

Vue 项目中融合拦截器和 JWT 验证的完整指南

前端

引入背景

在 Vue 项目中,我们经常需要处理用户认证和权限控制。为了实现这些功能,我们需要使用拦截器和 JSON Web 令牌 (JWT) 进行身份验证。JWT 是一种流行的、基于 JSON 的令牌,用于在两个 parties 之间安全地传输信息。

拦截器

拦截器是一种在 HTTP 请求和响应之间执行的函数。它可以用于多种目的,包括身份验证、缓存和日志记录。在本文中,我们将使用拦截器来验证 JWT 令牌,并根据令牌中的信息来授权用户访问不同的 API。

JWT 验证

JWT 验证是一个使用 JWT 令牌来验证用户身份的过程。JWT 令牌通常由三个部分组成:头部、载荷和签名。头部包含令牌的类型和算法,载荷包含令牌的数据,签名是使用私钥对载荷进行加密的。

当客户端发送请求时,它将 JWT 令牌包含在请求头中。服务器收到请求后,会验证令牌的签名,并检查令牌是否有效。如果令牌有效,服务器会根据令牌中的信息来授权用户访问不同的 API。

案例演示

在这个案例中,我们将使用 Axios 库来发送 HTTP 请求。Axios 是一个流行的 JavaScript 库,它可以简化 HTTP 请求的发送和接收。

首先,我们需要安装 Axios 库:

npm install axios

然后,我们需要在 Vue 项目中配置 Axios:

import axios from 'axios'

Vue.prototype.$axios = axios

现在,我们就可以使用 Axios 来发送 HTTP 请求了。

为了验证 JWT 令牌,我们需要使用拦截器。我们可以使用 Axios 提供的 requestresponse 拦截器:

axios.interceptors.request.use((config) => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

axios.interceptors.response.use((response) => {
  return response
}, (error) => {
  if (error.response.status === 401) {
    window.location.href = '/login'
  }
  return Promise.reject(error)
})

request 拦截器中,我们检查本地存储中是否有 token。如果有,我们将 token 添加到请求头中。在 response 拦截器中,我们检查响应的状态码。如果状态码是 401(未授权),我们将重定向用户到登录页面。

现在,我们就可以使用 Axios 来发送受保护的 HTTP 请求了。例如,我们可以发送一个请求来获取用户列表:

this.$axios.get('/api/users')
  .then((response) => {
    console.log(response.data)
  })
  .catch((error) => {
    console.log(error)
  })

如果用户没有登录,这个请求将被重定向到登录页面。如果用户已经登录,这个请求将返回用户列表。

总结

在本文中,我们学习了如何在 Vue 项目中使用拦截器和 JWT 验证来实现安全认证和权限控制。我们还提供了一个完整的案例,展示了如何将这些组件集成到 Vue 项目中。