Vue3中導航守衛(wèi)結合Axios實現(xiàn)token認證機制
在Vue 3中,導航守衛(wèi)(Navigation Guard)用于攔截路由的變化,可以在用戶訪問頁面前進行檢查。結合Axios進行token認證機制時,我們可以通過導航守衛(wèi)在路由跳轉時,檢查用戶的認證狀態(tài),確保用戶有有效的token進行認證。
1. 安裝必要的依賴
首先,確保你已經(jīng)安裝了 axios
,這是我們用來發(fā)起 HTTP 請求的庫。
npm install axios
2. 創(chuàng)建 axios 實例
我們通常會創(chuàng)建一個封裝了token認證邏輯的 axios
實例,便于管理所有請求。
// src/utils/axios.js import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', // 設置基本的 API 地址 timeout: 5000, // 設置請求超時 }); // 請求攔截器 instance.interceptors.request.use(config => { const token = localStorage.getItem('token'); // 從localStorage獲取token if (token) { config.headers['Authorization'] = `Bearer ${token}`; // 在請求頭中加入token } return config; }, error => { return Promise.reject(error); }); // 響應攔截器 instance.interceptors.response.use(response => { return response; }, error => { if (error.response.status === 401) { // 如果響應返回 401,表示未授權,可以跳轉到登錄頁面 window.location.href = '/login'; } return Promise.reject(error); }); export default instance;
3. 在 router.js 中使用導航守衛(wèi)
接下來,在 router.js
中配置路由的導航守衛(wèi),檢查每次路由跳轉前的用戶認證狀態(tài)。
// src/router/index.js import { createRouter, createWebHistory } from 'vue-router'; import axios from '../utils/axios'; // 導入axios實例 import Home from '../views/Home.vue'; import Login from '../views/Login.vue'; const routes = [ { path: '/', name: 'Home', component: Home, meta: { requiresAuth: true }, // 需要認證的頁面 }, { path: '/login', name: 'Login', component: Login, }, ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes, }); // 全局前置守衛(wèi) router.beforeEach(async (to, from, next) => { const token = localStorage.getItem('token'); if (to.meta.requiresAuth) { if (!token) { // 如果目標路由需要認證且沒有token,跳轉到登錄頁 return next({ name: 'Login' }); } try { // 如果有token,驗證token是否有效 const response = await axios.get('/verify-token'); // 假設后端提供了驗證token的接口 if (response.status === 200) { next(); // token有效,允許繼續(xù)訪問 } } catch (error) { // token無效或請求失敗,跳轉到登錄頁 localStorage.removeItem('token'); // 清除無效token next({ name: 'Login' }); } } else { next(); // 不需要認證的頁面,直接訪問 } }); export default router;
4. 處理登錄與登出邏輯
在用戶登錄時,我們會獲取token并將其存儲在 localStorage
中;登出時,我們需要清除token。
// src/views/Login.vue <template> <div> <h1>Login</h1> <form @submit.prevent="handleLogin"> <input v-model="username" placeholder="Username" /> <input v-model="password" type="password" placeholder="Password" /> <button type="submit">Login</button> </form> </div> </template> <script> import axios from '../utils/axios'; export default { data() { return { username: '', password: '', }; }, methods: { async handleLogin() { try { const response = await axios.post('/login', { username: this.username, password: this.password, }); const token = response.data.token; localStorage.setItem('token', token); // 保存token this.$router.push('/'); // 登錄成功后跳轉到首頁 } catch (error) { console.error('Login failed:', error); } }, }, }; </script>
// src/views/Home.vue <template> <div> <h1>Welcome Home</h1> <button @click="handleLogout">Logout</button> </div> </template> <script> export default { methods: { handleLogout() { localStorage.removeItem('token'); // 清除token this.$router.push('/login'); // 跳轉到登錄頁 }, }, }; </script>
5. 使用場景
這個 token 認證機制可以應用于任何需要用戶登錄的頁面。例如,用戶在訪問需要身份認證的頁面(如首頁)時,首先會觸發(fā)導航守衛(wèi),在守衛(wèi)中驗證 token 是否有效。如果沒有有效的 token,用戶會被重定向到登錄頁面。
場景總結:
- 首頁 (
/
): 需要 token 來驗證用戶身份。導航守衛(wèi)檢查 token 是否存在并有效。 - 登錄頁 (
/login
): 用戶輸入用戶名和密碼后,向后端發(fā)送請求,獲取并存儲 token。 - 全局登出: 用戶登出時,清除 token 并跳轉到登錄頁。
6. 總結
通過上述步驟,我們已經(jīng)實現(xiàn)了:
- 使用
axios
進行 token 的請求頭設置與認證。 - 在 Vue 3 的路由中使用導航守衛(wèi)攔截認證邏輯。
- 在登錄時保存 token,并在用戶訪問需要認證的頁面時檢查 token 是否有效。
這種認證機制可以有效地保證用戶在訪問敏感頁面時,必須通過認證,而不會直接跳過認證過程。
到此這篇關于Vue3中導航守衛(wèi)結合Axios實現(xiàn)token認證機制的文章就介紹到這了,更多相關Vue3 token認證機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue Echarts渲染數(shù)據(jù)導致殘留臟數(shù)據(jù)的問題處理
這篇文章主要介紹了Vue Echarts渲染數(shù)據(jù)導致殘留臟數(shù)據(jù)的問題處理,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-08-08Vue CLI3.0中使用jQuery和Bootstrap的方法
這篇文章主要介紹了Vue CLI3.0中使用jQuery和Bootstrap的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02vue-admin-template配置快捷導航的代碼(標簽導航欄)
這篇文章主要介紹了vue-admin-template配置快捷導航的方法(標簽導航欄),本文通過實例代碼給大家介紹的非常詳細,對大家學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09