需求: 當向后端請求接口返回 403 的時候,直接跳到登錄頁面讓用戶登錄
實現方案: 在請求結束后攔截器中判斷,如果是 403 就跳轉
遇到難題: 一級頁面(我的) onShow() 中有接口請求,用戶在沒有登錄的狀態下,來到我的頁面, 接口報錯返回403 ,觸發我們在攔截器寫好的方法,跳轉到登錄頁面,
出現怪異現象:1.進入到我的頁面, 會連續跳轉2次到登錄頁面(因為我的頁面有兩個請求都返回 403,所以會連續跳兩次)
2.跳轉到登錄頁面后, 點擊導航欄返回后, 接口會再次請求報錯返回403(因為onShow的方法) ,觸發我們在攔截器寫好的方法,再次跳轉到登錄頁面(死循環)
解決方法:
處理怪異現象1:
1.1在跳轉到登錄頁面之前向本地存儲中獲取 jump (得到空)
1.2if 判斷進入到跳轉登錄頁的方法. (注意延遲300跳轉)
1.3同時再為本地存儲 jump 設一個值.(這樣做就可以避免 300毫秒以內的接口即使報403,也不會進入到if(!jump)函數體中,也就不會出現連續跳轉了)
1.4在登錄頁面將本地存儲 jump 移除(別忘記了,不然之后其他接口報 403 就不會進入函數體了,不會跳轉了)
http.js文件
login.vue 文件
處理怪異現象2:
我們在登錄頁面中,使用uni-app的 onBackPress 事件來監聽用戶點擊返回鍵
如果是從其他頁面來的,點擊返回鍵執行back方法
back方法: