登入攔截邏輯
第一步:路由攔截
首先在定義路由的時候就需要多新增乙個自定義欄位requireauth,用於判斷該路由的訪問是否需要登入。如果使用者已經登入,則順利進入路由, 否則就進入登入頁面。
const routes = [,,
component: repository
},];
定義完路由後,我們主要是利用vue-router提供的鉤子函式beforeeach()對路由進行判斷。
router.beforeeach((to, from, next) =>
else // 將跳轉的路由path作為引數,登入成功後跳轉到該路由})}
}else
})
每個鉤子方法接收三個引數:
確保要呼叫 next 方法,否則鉤子就不會被 resolved。
其中,to.meta中是我們自定義的資料,其中就包括我們剛剛定義的requireauth欄位。通過這個欄位來判斷該路由是否需要登入許可權。需要的話,同時當前應用不存在token,則跳轉到登入頁面,進行登入。登入成功後跳轉到目標路由。
登入攔截到這裡就結束了嗎?並沒有。這種方式只是簡單的前端路由控制,並不能真正阻止使用者訪問需要登入許可權的路由。還有一種情況便是:當前token失效了,但是token依然儲存在本地。這時候你去訪問需要登入許可權的路由時,實際上應該讓使用者重新登入。
這時候就需要結合 http *** + 後端介面返回的http 狀態碼來判斷。
第二步:***
要想統一處理所有http請求和響應,就得用上 axios 的***。通過配置http response inteceptor,當後端介面返回401 unauthorized(未授權),讓使用者重新登入。
}return promise.reject(error.response.data) // 返回介面返回的錯誤資訊
});***
首先我們要明白設定***的目的是什麼,當我們需要統一處理http請求和響應時我們通過設定***處理方便很多.這個專案我引入了element ui框架,所以我是結合element中loading和message元件來處理的.我們可以單獨建立乙個http的js檔案處理axios,再到main.js中引入.
/* http配置 */
// 引入axios以及element ui中的loading和message元件
import axios from 'axios'
import from 'element-ui'
// 超時時間
axios.defaults.timeout = 5000
// http請求***
var loadinginstace
axios.interceptors.request.use(config => )
return config
}, error => )
return promise.reject(error)
})// http響應***
axios.interceptors.response.use(data => , error => )
return promise.reject(error)
})export default axios;
這樣我們就統一處理了http請求和響應的攔截.當然我們可以根據具體的業務要求更改攔截中的處理 Vue 路由攔截
使用sessionstorage,beforeenter進行路由攔截var storage window.sessionstorage storage.setitem auth 1 this router.push teacher import myrouter from router index ...
vue請求攔截響應攔截
2020.10.28 早9.40。今天忙裡偷閒記錄下在vue裡面封裝axios以及請求攔截響應 首先理解整個思路 1 將baseurl提出來,這是訪問服務端的位址。2 使用es6類的寫法封裝axios 3 封裝之後在建立api資料夾在此資料夾裡面引入封裝後的axios,之後就可以建立各個介面。bas...
Vue之攔截與響應攔截
vue中有乙個攔截方法,當我們發起請求或者請求回來的時候,我們需要做一定的資料過濾或者攔截 下面是在開發專案時進行的乙個axios的請求封裝 就是我們在請求之前進行的乙個操作比如說,我們可以在請求之前加乙個loading框,在響應攔截後進行loading框的乙個去除。響應攔截 就是請求得到回應,我們...