最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Vue 消除Token過(guò)期時(shí)刷新頁(yè)面的重復(fù)提示問(wèn)題

 更新時(shí)間:2021年07月08日 09:03:31   作者:阿拉伯1999  
很多朋友在token過(guò)期時(shí)刷新頁(yè)面,頁(yè)面長(zhǎng)時(shí)間未操作,再刷新頁(yè)面時(shí),第一次彈出“token失效,請(qǐng)重新登錄!”提示,針對(duì)這個(gè)問(wèn)題該怎么處理呢,下面小編給大家?guī)?lái)原因分析及解決方法,一起看看吧

token過(guò)期時(shí),刷新頁(yè)面,頁(yè)面如果加載時(shí)向后端發(fā)起多個(gè)請(qǐng)求,會(huì)重復(fù)告警提示,經(jīng)過(guò)處理,只提示一次告警。

1、問(wèn)題現(xiàn)象

  頁(yè)面長(zhǎng)時(shí)間未操作,再刷新頁(yè)面時(shí),第一次彈出“token失效,請(qǐng)重新登錄!”提示,然后跳轉(zhuǎn)到登錄頁(yè)面,接下來(lái)又彈出了n個(gè)“Token已過(guò)期”的后端返回消息提示。

2、原因分析

  當(dāng)前頁(yè)面初始化,有多個(gè)向后端查詢系統(tǒng)參數(shù)的調(diào)用,代碼如下:

created () {
    // ========================================================================
    // 獲取需要的系統(tǒng)參數(shù),注意:getParameterClass方法是異步加載數(shù)據(jù)的。
    // 如需要打印觀察,需要通過(guò)watch來(lái)處理

    // 獲取用戶類型的參數(shù)類別
    this.commonFuncs.getParameterClass(this,"user_type","userTypeList","userTypeMap");

    // 獲取用戶狀態(tài)的參數(shù)類別
    for(var i = 0; i < this.userStatusList.length; i++){
      var item = this.userStatusList[i];
      var mapKey = parseInt(item.itemKey);
      this.userStatusMap.set(mapKey, item);
    }

    // 獲取性別的參數(shù)類別
    this.commonFuncs.getParameterClass(this,"gender","","genderMap");

    // 獲取部門的參數(shù)類別
    this.commonFuncs.getParameterClass(this,"department","","deptMap");

    // 獲取角色的參數(shù)類別
    this.commonFuncs.getParameterClass(this,"role","","roleMap");

    // 查詢用戶記錄
    this.queryUsers();
  },

  這些請(qǐng)求,是axios調(diào)用,是異步執(zhí)行的,因此,刷新頁(yè)面時(shí),這些請(qǐng)求幾乎立即就發(fā)出了。然后,這些請(qǐng)求的響應(yīng)會(huì)陸續(xù)返回。

  響應(yīng)首先被下面的response攔截器處理:

// token相關(guān)的response攔截器
instance.interceptors.response.use(response => {  
  if (response) {
    switch (response.data.code) {
      case 3: //token為空
      case 4: //token過(guò)期
      case 5: //token不正確    
        localStorage.clear();     //刪除用戶信息
        alert('token失效,請(qǐng)重新登錄!');
        // 要跳轉(zhuǎn)登陸頁(yè)
        router.replace({
              path: '/login',
        });
        break;
      case 6: //禁止訪問(wèn)
        // 跳到403頁(yè)面
        router.replace({
          path: '/forbidden',
        });        
        break;
      default:
        break;
    }
  }
  return response;
}, error => {
  return Promise.reject(error.response.data.message) //返回接口返回的錯(cuò)誤信息
})

  然后再進(jìn)入請(qǐng)求調(diào)用處的代碼:

 this.instance.getParameterClass(
      this.$baseUrl, {"classKey" : classKey}
    ).then(res => {
      //console.log(res.data);
      if (res.data.code == parent.global.SucessRequstCode){
        // 如果查詢成功
        // 成功的處理代碼...
      }else{
        alert(res.data.message);
      }
    }).catch(error => {
      //alert('查詢系統(tǒng)參數(shù)失敗!');            
      console.log(error);
    });

  現(xiàn)在的問(wèn)題:

對(duì)應(yīng)一個(gè)請(qǐng)求,如果token過(guò)期,reponse攔截器首先彈出告警提示,然后,調(diào)用處又有提示:

alert(res.data.message);

這樣就重復(fù)了。

對(duì)于同時(shí)發(fā)出的多個(gè)請(qǐng)求,需要有標(biāo)記來(lái)記住這次token過(guò)期是否已提示,只提示一次,如已提示,就不必再提示。

3、解決方案

3.1、消除攔截器和請(qǐng)求調(diào)用處對(duì)token過(guò)期的重復(fù)提示

  編寫(xiě)一個(gè)公共方法,檢查是否是被攔截處理的返回碼,放于/src/common/commonFuncs.js文件中,代碼如下:

 /**
   * 判斷是否被攔截處理的返回碼,返回true,表示被攔截
   * 此方法的作用是調(diào)用處,無(wú)需處理被攔截的返回碼的錯(cuò)誤提示
   * @param {請(qǐng)求的返回碼} code 
   */
  isInterceptorCode(code){
    switch (code) {
      case 3: //token為空
      case 4: //token過(guò)期
      case 5: //token不正確    
      case 6: //禁止訪問(wèn)
        return true;
      default:
        break;
    }
    return false;
  }

  然后所有調(diào)用處,針對(duì)非成功返回的處理均改為:

 if (!this.commonFuncs.isInterceptorCode(res.data.code)){
          alert(res.data.message);
        }

  這樣,消除了攔截處理和調(diào)用處理的重復(fù)告警。

3.2、多個(gè)請(qǐng)求只提示一次的處理

  在全局變量文件/src/common/global.js中,增加token無(wú)效標(biāo)記,代碼如下:

//全局變量

export default {
  // 請(qǐng)求成功返回碼
  SucessRequstCode:0,

  // token無(wú)效標(biāo)記
  TokenInvalidFlag : 0
}

  然后,修改攔截器代碼:

// token相關(guān)的response攔截器
instance.interceptors.response.use(response => {  
  if (response) {
    switch (response.data.code) {
      case 0: //正常
        // 復(fù)位token無(wú)效標(biāo)記置
        global.TokenInvalidFlag = 0;
        break;            
      case 3: //token為空
      case 4: //token過(guò)期
      case 5: //token不正確    
        localStorage.clear();     //刪除用戶信息
        if (global.TokenInvalidCounter == 0){
          alert('token失效,請(qǐng)重新登錄!');
        }
        // token無(wú)效標(biāo)記置1
        global.TokenInvalidFlag = 1;
            
        // 要跳轉(zhuǎn)登陸頁(yè)
        router.replace({
              path: '/login',
        });
        break;
      case 6: //禁止訪問(wèn)
        // 跳到403頁(yè)面
        router.replace({
          path: '/forbidden',
        });        
        break;
      default:
        break;
    }
  }
  return response;
}, error => {
  return Promise.reject(error.response.data.message) //返回接口返回的錯(cuò)誤信息
})

  即在第一次收到token過(guò)期消息(此時(shí)TokenInvalidFlag=0)時(shí),進(jìn)行提示,然后設(shè)置為1(此時(shí)TokenInvalidFlag=1),后續(xù)的若干個(gè)請(qǐng)求的響應(yīng),都不會(huì)在告警提示了。直到收到成功返回碼時(shí)復(fù)位為0,此時(shí)表示重新登錄成功了。

  經(jīng)測(cè)試,這樣處理達(dá)到預(yù)期效果,即token過(guò)期時(shí),刷新頁(yè)面,只提示一次告警。

作者:阿拉伯1999 出處:http://www.cnblogs.com/alabo1999/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利. 養(yǎng)成良好習(xí)慣,好文章隨手頂一下。

到此這篇關(guān)于Vue 消除Token過(guò)期時(shí)刷新頁(yè)面的重復(fù)提示的文章就介紹到這了,更多相關(guān)Vue刷新頁(yè)面的重復(fù)提示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 面試題:react和vue的區(qū)別分析

    面試題:react和vue的區(qū)別分析

    這篇文章主要介紹了react和vue的區(qū)別分析,在面試中經(jīng)常會(huì)遇到,小編通過(guò)實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Vue.js 實(shí)現(xiàn)微信公眾號(hào)菜單編輯器功能(二)

    Vue.js 實(shí)現(xiàn)微信公眾號(hào)菜單編輯器功能(二)

    這篇文章主要介紹了Vue.js 實(shí)現(xiàn)微信公眾號(hào)菜單編輯器功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • vuex安裝失敗解決的方法實(shí)例

    vuex安裝失敗解決的方法實(shí)例

    Vuex是一個(gè)專為Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于vuex安裝失敗解決的方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 前端(VUE)打包上線去除console.log解決方案

    前端(VUE)打包上線去除console.log解決方案

    這篇文章主要介紹了如何在前端項(xiàng)目中使用terser-webpack-plugin插件來(lái)刪除代碼中的console.log語(yǔ)句,以避免在正式環(huán)境中輸出調(diào)試信息,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 使用vue3重構(gòu)拼圖游戲的實(shí)現(xiàn)示例

    使用vue3重構(gòu)拼圖游戲的實(shí)現(xiàn)示例

    這篇文章主要介紹了使用vue3重構(gòu)拼圖游戲的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue3.0 CLI - 3.2 路由的初級(jí)使用教程

    vue3.0 CLI - 3.2 路由的初級(jí)使用教程

    這篇文章主要介紹了vue3.0 CLI - 3.2 - 路由的初級(jí)使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • vue中的自定義分頁(yè)插件組件的示例

    vue中的自定義分頁(yè)插件組件的示例

    這篇文章主要介紹了vue中的自定義分頁(yè)插件組件的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 詳解Vue webapp項(xiàng)目通過(guò)HBulider打包原生APP(vue+webpack+HBulider)

    詳解Vue webapp項(xiàng)目通過(guò)HBulider打包原生APP(vue+webpack+HBulider)

    這篇文章主要介紹了詳解Vue webapp項(xiàng)目通過(guò)HBulider打包原生APP(vue+webpack+HBulider),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼

    vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼

    這篇文章主要介紹了vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • vuex actions異步修改狀態(tài)的實(shí)例詳解

    vuex actions異步修改狀態(tài)的實(shí)例詳解

    今天小編就為大家分享一篇vuex actions異步修改狀態(tài)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論

昭苏县| 广元市| 徐汇区| 凉山| 汕尾市| 太仆寺旗| 甘洛县| 专栏| 阿城市| 罗源县| 广河县| 颍上县| 桑植县| 黔江区| 横山县| 馆陶县| 金山区| 阿勒泰市| 宣城市| 叶城县| 融水| 基隆市| 温泉县| 应城市| 上高县| 祁门县| 庆安县| 介休市| 城步| 卓尼县| 响水县| 扎赉特旗| 盈江县| 邵东县| 嘉善县| 江城| 伊宁市| 平潭县| 三亚市| 兖州市| 汾阳市|