亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

19/3/29學(xué)習(xí)筆記

galois / 3058人閱讀

摘要:如果用戶已經(jīng)登錄,則順利進(jìn)入路由,否則就進(jìn)入登錄頁(yè)面。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是確認(rèn)的。通過(guò)這個(gè)字段來(lái)判斷該路由是否需要登錄權(quán)限。還有一種情況便是當(dāng)前失效了,但是依然保存在本地。通過(guò)配置,當(dāng)后端接口返回未授權(quán),讓用戶重新登錄。

vue+axios 前端實(shí)現(xiàn)登錄攔截(路由攔截、http攔截)

一、路由攔截
登錄攔截邏輯
第一步:路由攔截
首先在定義路由的時(shí)候就需要多添加一個(gè)自定義字段requireAuth,用于判斷該路由的訪問(wèn)是否需要登錄。如果用戶已經(jīng)登錄,則順利進(jìn)入路由,
否則就進(jìn)入登錄頁(yè)面。

const routes = [

{
    path: "/",
    name: "/",
    component: Index
},
{
    path: "/repository",
    name: "repository",
    meta: {
        requireAuth: true,  // 添加該字段,表示進(jìn)入這個(gè)路由是需要登錄的
    },
    component: Repository
},
{
    path: "/login",
    name: "login",
    component: Login
}

];
定義完路由后,我們主要是利用vue-router提供的鉤子函數(shù)beforeEach()對(duì)路由進(jìn)行判斷。

router.beforeEach((to, from, next) => {

if (to.meta.requireAuth) {  // 判斷該路由是否需要登錄權(quán)限
    if (store.state.token) {  // 通過(guò)vuex state獲取當(dāng)前的token是否存在
        next();
    }
    else {
        next({
            path: "/login",
            query: {redirect: to.fullPath}  // 將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
        })
    }
}
else {
    next();
}

})
  

每個(gè)鉤子方法接收三個(gè)參數(shù):

to: Route: 即將要進(jìn)入的目標(biāo) 路由對(duì)象

from: Route: 當(dāng)前導(dǎo)航正要離開(kāi)的路由

next: Function: 一定要調(diào)用該方法來(lái) resolve 這個(gè)鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

next(): 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。

next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。

next(‘/’) 或者 next({ path: ‘/’ }): 跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。

確保要調(diào)用 next 方法,否則鉤子就不會(huì)被 resolved。

完整的方法見(jiàn)/src/router.js

其中,to.meta中是我們自定義的數(shù)據(jù),其中就包括我們剛剛定義的requireAuth字段。通過(guò)這個(gè)字段來(lái)判斷該路由是否需要登錄權(quán)限。需要的話,同時(shí)當(dāng)前應(yīng)用不存在token,則跳轉(zhuǎn)到登錄頁(yè)面,進(jìn)行登錄。登錄成功后跳轉(zhuǎn)到目標(biāo)路由。

登錄攔截到這里就結(jié)束了嗎?并沒(méi)有。這種方式只是簡(jiǎn)單的前端路由控制,并不能真正阻止用戶訪問(wèn)需要登錄權(quán)限的路由。還有一種情況便是:當(dāng)前token失效了,但是token依然保存在本地。這時(shí)候你去訪問(wèn)需要登錄權(quán)限的路由時(shí),實(shí)際上應(yīng)該讓用戶重新登錄。
這時(shí)候就需要結(jié)合 http 攔截器 + 后端接口返回的http 狀態(tài)碼來(lái)判斷。

第二步:攔截器
要想統(tǒng)一處理所有http請(qǐng)求和響應(yīng),就得用上 axios 的攔截器。通過(guò)配置http response inteceptor,當(dāng)后端接口返回401 Unauthorized(未授權(quán)),讓用戶重新登錄。

// http request 攔截器
axios.interceptors.request.use(

config => {
    if (store.state.token) {  // 判斷是否存在token,如果存在的話,則每個(gè)http header都加上token
        config.headers.Authorization = `token ${store.state.token}`;
    }
    return config;
},
err => {
    return Promise.reject(err);
});

// http response 攔截器
axios.interceptors.response.use(

response => {
    return response;
},
error => {
    if (error.response) {
        switch (error.response.status) {
            case 401:
                // 返回 401 清除token信息并跳轉(zhuǎn)到登錄頁(yè)面
                store.commit(types.LOGOUT);
                router.replace({
                    path: "login",
                    query: {redirect: router.currentRoute.fullPath}
                })
        }
    }
    return Promise.reject(error.response.data)   // 返回接口返回的錯(cuò)誤信息
});

 

二、http攔截
攔截器

首先我們要明白設(shè)置攔截器的目的是什么,當(dāng)我們需要統(tǒng)一處理http請(qǐng)求和響應(yīng)時(shí)我們通過(guò)設(shè)置攔截器處理方便很多.

這個(gè)項(xiàng)目我引入了element ui框架,所以我是結(jié)合element中l(wèi)oading和message組件來(lái)處理的.我們可以多帶帶建立一個(gè)http的js文件處理axios,再到main.js中引入.

http配置

*/
// 引入axios以及element ui中的loading和message組件
import axios from "axios"
import { Loading, Message } from "element-ui"
// 超時(shí)時(shí)間
axios.defaults.timeout = 5000
// http請(qǐng)求攔截器
var loadinginstace
axios.interceptors.request.use(config => {
// element ui Loading方法
loadinginstace = Loading.service({ fullscreen: true })
return config
}, error => {
loadinginstace.close()
Message.error({
message: "加載超時(shí)"
})
return Promise.reject(error)
})
// http響應(yīng)攔截器
axios.interceptors.response.use(data => {// 響應(yīng)成功關(guān)閉loading
loadinginstace.close()
return data
}, error => {
loadinginstace.close()
Message.error({
message: "加載失敗"
})
return Promise.reject(error)
})

export default axios
這樣我們就統(tǒng)一處理了http請(qǐng)求和響應(yīng)的攔截.當(dāng)然我們可以根據(jù)具體的業(yè)務(wù)要求更改攔截中的處理.
轉(zhuǎn)載自:https://www.cnblogs.com/guoxi...

2 vue中axios的使用與封裝
https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109216.html

相關(guān)文章

  • ApacheCN 人工智能知識(shí)樹(shù) v1.0

    摘要:貢獻(xiàn)者飛龍版本最近總是有人問(wèn)我,把這些資料看完一遍要用多長(zhǎng)時(shí)間,如果你一本書(shū)一本書(shū)看的話,的確要用很長(zhǎng)時(shí)間。為了方便大家,我就把每本書(shū)的章節(jié)拆開(kāi),再按照知識(shí)點(diǎn)合并,手動(dòng)整理了這個(gè)知識(shí)樹(shù)。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...

    劉厚水 評(píng)論0 收藏0
  • 【LNMPR源碼學(xué)習(xí)筆記匯總

    摘要:此文用于匯總跟隨陳雷老師及團(tuán)隊(duì)的視頻,學(xué)習(xí)源碼過(guò)程中的思考整理與心得體會(huì),此文會(huì)不斷更新視頻傳送門(mén)每日學(xué)習(xí)記錄使用錄像設(shè)備記錄每天的學(xué)習(xí)源碼學(xué)習(xí)源碼學(xué)習(xí)內(nèi)存管理筆記源碼學(xué)習(xí)內(nèi)存管理筆記源碼學(xué)習(xí)內(nèi)存管理筆記源碼學(xué)習(xí)基本變量筆記 此文用于匯總跟隨陳雷老師及團(tuán)隊(duì)的視頻,學(xué)習(xí)源碼過(guò)程中的思考、整理與心得體會(huì),此文會(huì)不斷更新 視頻傳送門(mén):【每日學(xué)習(xí)記錄】使用錄像設(shè)備記錄每天的學(xué)習(xí) PHP7...

    Barrior 評(píng)論0 收藏0
  • React 入門(mén)學(xué)習(xí)筆記整理目錄

    摘要:入門(mén)學(xué)習(xí)筆記整理一搭建環(huán)境入門(mén)學(xué)習(xí)筆記整理二簡(jiǎn)介與語(yǔ)法入門(mén)學(xué)習(xí)筆記整理三組件入門(mén)學(xué)習(xí)筆記整理四事件入門(mén)學(xué)習(xí)筆記整理五入門(mén)學(xué)習(xí)筆記整理六組件通信入門(mén)學(xué)習(xí)筆記整理七生命周期入門(mén)學(xué)習(xí)筆記整理八入門(mén)學(xué)習(xí)筆記整理九路由React 入門(mén)學(xué)習(xí)筆記整理(一)——搭建環(huán)境 React 入門(mén)學(xué)習(xí)筆記整理(二)—— JSX簡(jiǎn)介與語(yǔ)法 React 入門(mén)學(xué)習(xí)筆記整理(三)—— 組件 React 入門(mén)學(xué)習(xí)筆記整理(...

    daryl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

galois

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<