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

Vue項(xiàng)目實(shí)現(xiàn)token無感刷新的示例代碼

 更新時(shí)間:2023年07月21日 08:43:39   作者:fuGUI  
最近在使用系統(tǒng)的過程中,業(yè)務(wù)人員反饋剛登錄一會(huì)就提示token過期需要重新登錄,所以本文為大家分享一個(gè)無感刷新的實(shí)現(xiàn)代碼,需要的可以參考下

背景

最近在使用系統(tǒng)的過程中,業(yè)務(wù)人員反饋剛登錄一會(huì)就提示token過期需要重新登錄,這樣體驗(yàn)很不友好,他們想要把過期時(shí)間設(shè)置長一點(diǎn),不想頻繁去登陸。

思考

如果token時(shí)間設(shè)置的太長,會(huì)有安全的問題;如果可以檢測到token過期,然后請(qǐng)求新的token替換過期的token,再去請(qǐng)求接口,這樣token過期,做到用戶無感知。

實(shí)現(xiàn)

檢測token過期可以主動(dòng)和被動(dòng)的去處理,簡單來說,主動(dòng)判斷就是在token過期前就處理,被動(dòng)的就是token過期后再去處理。
以下從用三個(gè)方法來實(shí)現(xiàn)token的無感刷新。

1.通過返回過期字段判斷

通過token認(rèn)證接口返回的過期字段判斷,然后本地時(shí)間進(jìn)行對(duì)比,如果過期就重新獲取token,這個(gè)也有缺點(diǎn),如果本地時(shí)間不準(zhǔn)確,會(huì)存在判斷失誤問題。

2.通過定時(shí)刷新獲取token

寫個(gè)全局定時(shí)器,定時(shí)刷新token。這個(gè)方法顯然不好,不建議使用。

3.通過axios響應(yīng)攔截器中攔截

判斷token 返回過期后,調(diào)用刷新token接口

實(shí)現(xiàn):

// 創(chuàng)建 axios 實(shí)例
const request = axios.create({
  // API 請(qǐng)求的默認(rèn)前綴
  baseURL: baseUrl,
  withCredentials: true,
  timeout: 30000 // 請(qǐng)求超時(shí)時(shí)間
})
// 此處是為了為了防止多次刷新token,可以通過一個(gè)變量isRefreshing 去控制是否在刷新token的狀態(tài)。
let isRefreshing = false // 是否正在刷新的標(biāo)記
此次為了解決同時(shí)發(fā)起兩個(gè)或兩個(gè)以上的請(qǐng)求時(shí),過期如何處理
let requests = [] // 重試隊(duì)列
// 異常攔截處理器
const errorHandler = error => {
  if (error.response) {
   //token過期狀態(tài)碼
    if (error.response.status === 401) {
      if (!isRefreshing) {
        // 正在刷新,執(zhí)行else里面的邏輯
        isRefreshing = true
        return store.dispatch('RefreshToken',store.state.user.refresh_token).then(res => {
//獲取新的token,這里的邏輯自行處理,access_token和refresh_token都需要替換保存
          error.config.headers.Authorization = 'Bearer ' + res.access_token
           // token 請(qǐng)求成功后將數(shù)組的方法重新執(zhí)行
          requests.forEach((cb) => cb(res.access_token))
          requests = [] // 重新請(qǐng)求完清空
          return request(error.config)
        }).catch(() => {
          // 如果刷新的refresh_token也過期了,重新登錄
          notification.error({
            message: 'token過期',
            description: '請(qǐng)重新登錄'
          })
          if (token) {
            store.dispatch('Logout').then(() => {
              window.location.reload()
            })
          }
        }).finally(() => {
          isRefreshing = false
        })
      } else {
        // 返回未執(zhí)行 resolve 的 Promise
        return new Promise(resolve => {
          // 用函數(shù)形式將 resolve 存入,等待刷新后再執(zhí)行
          requests.push(token => {
            error.config.headers.Authorization = 'Bearer ' + token
            resolve(request(error.config))
          })
        })
      }
    }
  }
  return Promise.reject(error)
}

request.interceptors.response.use(response => {
 //......
}, errorHandler)

到此這篇關(guān)于Vue項(xiàng)目實(shí)現(xiàn)token無感刷新的示例代碼的文章就介紹到這了,更多相關(guān)Vue token無感刷新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue2.0在table中實(shí)現(xiàn)全選和反選的示例代碼

    vue2.0在table中實(shí)現(xiàn)全選和反選的示例代碼

    這篇文章主要介紹了vue2.0在table中實(shí)現(xiàn)全選和反選的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue使用pdf.js預(yù)覽pdf文件的方法

    vue使用pdf.js預(yù)覽pdf文件的方法

    在頁面進(jìn)行pdf預(yù)覽的時(shí)候,由于文件不能夠打印和下載很難滿足客戶的需求,接下來通過本文給大家介紹vue使用pdf.js來進(jìn)行pdf預(yù)覽,需要的朋友可以參考下
    2021-12-12
  • Vue3子組件watch無法監(jiān)聽父組件傳遞的屬性值的解決方法

    Vue3子組件watch無法監(jiān)聽父組件傳遞的屬性值的解決方法

    這篇文章主要介紹了Vue3子組件watch無法監(jiān)聽父組件傳遞的屬性值的解決方法,文中通過代碼示例講解的講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-10-10
  • Vue實(shí)現(xiàn)按鈕旋轉(zhuǎn)和移動(dòng)位置的實(shí)例代碼

    Vue實(shí)現(xiàn)按鈕旋轉(zhuǎn)和移動(dòng)位置的實(shí)例代碼

    這篇文章主要介紹了Vue實(shí)現(xiàn)按鈕旋轉(zhuǎn)和移動(dòng)位置的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼

    詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼

    在開發(fā)中我們需要一種能夠統(tǒng)一團(tuán)隊(duì)代碼風(fēng)格的工具,作為強(qiáng)制性的規(guī)范,統(tǒng)一整個(gè)項(xiàng)目的代碼風(fēng)格,這篇文章主要介紹了詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼,需要的朋友可以參考下
    2018-11-11
  • 詳解iview的checkbox多選框全選時(shí)校驗(yàn)問題

    詳解iview的checkbox多選框全選時(shí)校驗(yàn)問題

    這篇文章主要介紹了詳解iview的checkbox多選框全選時(shí)校驗(yàn)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • 一文帶你搞懂Vue3中的各種ref的使用

    一文帶你搞懂Vue3中的各種ref的使用

    在?Vue3?中,有許多與響應(yīng)式相關(guān)的函數(shù),例如?toRef、toRefs、isRef、unref?等等,本文將詳細(xì)介紹這些函數(shù)的用法,讓我們?cè)趯?shí)際開發(fā)中知道應(yīng)該使用哪些?API?并能夠熟練地回答面試官的相關(guān)問題
    2023-08-08
  • Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值)

    Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值)

    這篇文章主要介紹了Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue.config.js中配置Vue的路徑別名的方法

    vue.config.js中配置Vue的路徑別名的方法

    這篇文章主要介紹了vue.config.js中配置Vue的路徑別名的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn)

    VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn)

    本文主要介紹了VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論

崇文区| 永年县| 佛冈县| 丰都县| 广州市| 塘沽区| 巨野县| 中宁县| 云南省| 岳池县| 肥乡县| 蓬莱市| 鄂温| 如皋市| 昆明市| 永昌县| 玉溪市| 滨海县| 会东县| 类乌齐县| 邵东县| 清涧县| 平安县| 四平市| 乐平市| 永福县| 双桥区| 临湘市| 佛山市| 凤山县| 娄底市| 施甸县| 宝兴县| 扶绥县| 宜黄县| 罗江县| 桂东县| 崇州市| 余干县| 香河县| 延川县|