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

關(guān)于401狀態(tài)碼的含義和處理方式

 更新時(shí)間:2022年08月16日 10:21:41   作者:木藍(lán)茶陌*_*  
這篇文章主要介紹了關(guān)于401狀態(tài)碼的含義和處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

401狀態(tài)碼的含義和處理

401狀態(tài)碼的含義

axios向服務(wù)器端發(fā)送請求時(shí),有兩種情況會出現(xiàn)401狀態(tài)碼(unauthorized未授權(quán)):

1. 服務(wù)端要求傳遞token信息,而實(shí)際發(fā)送請求時(shí)沒有傳遞。

2. 發(fā)送請求時(shí)有傳遞token到達(dá)服務(wù)器端,但由于時(shí)間比較久,這個(gè)token在服務(wù)器中已經(jīng)過期了(服務(wù)器存儲token有效期時(shí)間為2個(gè)小時(shí))。

總之,服務(wù)器端有些api接口要求傳遞token,token失效或沒有傳遞,就會報(bào)401錯(cuò)誤。

401狀態(tài)碼的處理

1. 在axios請求攔截器中做token傳遞操作。

2. 可以這樣設(shè)置,在axios響應(yīng)攔截器中判斷請求狀態(tài)如果是401,就強(qiáng)制用戶重新登錄系統(tǒng)。

第2種情況處理實(shí)現(xiàn):

在axios的響應(yīng)攔截器中,判斷錯(cuò)誤碼等于401就強(qiáng)制登錄(utils/ax.js)

// 引入路由
import router from '@/router'
// 配置響應(yīng)攔截器
axios.interceptors.response.use(function (response) {
? // 正常響應(yīng)處理
? return response
}, function (error) {
? // 非正常響應(yīng)處理(包括401)
? // console.dir(error) // 對象: config request response isAxiosError toJSON
? if (error.response.status === 401) {
? ? // token失效(token在服務(wù)器端已經(jīng)失效了,2個(gè)小時(shí)時(shí)效)
? ? // 強(qiáng)制用戶重新登錄系統(tǒng),以刷新服務(wù)器端的token時(shí)效
? ? router.push('/login')
? ? // 不要給做錯(cuò)誤提示了
? ? return new Promise(function () {}) // 空的Promise對象,沒有機(jī)會執(zhí)行catch,進(jìn)而不做錯(cuò)誤提示了
? }
? // return new Promise((resolve,reject)=>{
? // reject('獲得文章失??!')
? // })
? return Promise.reject(error)
})

注意:

1. 路由對象.push(xxx) 可以實(shí)現(xiàn)編程式導(dǎo)航。

2. 路由對象:在組件中是 this.$router ,在main.js/ax.js文件中就是router對象(需要import導(dǎo)入)。

模擬服務(wù)器端token失效步驟:

1. 刪除客戶端sessionStorage數(shù)據(jù)。

2. 暫時(shí)屏蔽守衛(wèi)代碼(開發(fā)完畢再打開)。

401狀態(tài)碼升級處理

401狀態(tài)碼

axios向服務(wù)器端發(fā)送請求時(shí)有兩種情況會出現(xiàn)401狀態(tài)碼(unauthorized未授權(quán)):

1. 服務(wù)端要求傳遞token信息,而實(shí)際沒有傳遞。

2. 有傳遞token到達(dá)服務(wù)器端,但由于時(shí)間比較久,這個(gè)token在服務(wù)器中已經(jīng)過期了(服務(wù)器存儲token有效期時(shí)間為2個(gè)小時(shí))。

總之,服務(wù)器端有些api接口要求傳遞token,token失效或沒有傳遞,就會報(bào)401錯(cuò)誤。

相關(guān)處理

1. 第1種情況,可以在axios請求攔截器中做token傳遞操作。

2. 第2種情況,之前是這樣處理的,在axios響應(yīng)攔截器中判斷請求狀態(tài)如果是401,就強(qiáng)制用戶重新登錄系統(tǒng)

這樣處理用戶體驗(yàn)非常不好,現(xiàn)在做一次升級優(yōu)化處理。 

服務(wù)器端返回兩個(gè)秘鑰信息,它們在服務(wù)端都有使用時(shí)效:

  • token 有效期2小時(shí)。
  • refresh_token 有效期14天,refresh_token用于在token過期后,重新獲取并刷新token時(shí)效使用的。

針對第2種401狀態(tài)碼處理步驟為:

1. 判斷refresh_token是否存在

不存在就直接重新登錄。

存在,axios發(fā)起請求,帶著refresh_token請求服務(wù)端,獲取新token出來:

成功:對vuex和localStorage進(jìn)行token信息更新。

失敗:清空無效用戶信息,直接重新登錄。

示例代碼1 

// 響應(yīng)攔截器 (響應(yīng)成功:剝離無效數(shù)據(jù),響應(yīng)失?。核⑿聇oken)
instance.interceptors.response.use(res => {
  // 將來獲取數(shù)據(jù):res.data.data 麻煩
  // 想要結(jié)果:data 即可
  try {
    return res.data.data
  } catch (e) {
    return res
  }
}, async err => {
  try {
    // 目的:刷新token
    if (err.response && err.response.status === 401) {
    // 未登錄  跳轉(zhuǎn)登錄頁面  阻止程序運(yùn)行
      const { user } = store.state
      // 如果沒有token沒登錄  如果沒有refresh_token無法刷新token
      if (!user.token || !user.refresh_token) {
        router.push('/login')
        return Promise.reject(err)
      }
      // 刷新token,發(fā)請求,沒有配置的axios,自己配置refresh_token
      const res = await axios({
        url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
        method: 'put',
        headers: {
          Authorization: `Bearer ${user.refresh_token}`
        }
      })
      // token獲取  res.data.data.token
      // 更新 vuex 和 本地 token
      store.commit('setUser', {
        token: res.data.data.token,
        refresh_token: user.refresh_token
      })
      // 繼續(xù)發(fā)送剛才錯(cuò)誤的請求
      // instance({之前錯(cuò)誤的請求配置})
      // err錯(cuò)誤對象 包含(response 響應(yīng)對象 |config 請求配置)
      return instance(err.config)
    }
  } catch (e) { // exception 異常
    // 刷新token失敗
    router.push('/login')
    return Promise.reject(e)
  }
  return Promise.reject(err)
})

演示代碼:promise錯(cuò)誤處理:

示例代碼2

import store from '@/store' // 引入vuex中的store實(shí)例
import router from '@/router' // 引入路由對象實(shí)例
……
// 響應(yīng)攔截器
instance.interceptors.response.use(
  function (response) {
    try {
      // 返回具體有價(jià)值的業(yè)務(wù)數(shù)據(jù)
      return response.data.data
    } catch (error) {
      return response.data
    }
  },
  async function (error) {
    // 響應(yīng)有錯(cuò)誤,有可能錯(cuò)誤狀態(tài)碼為401
    if (error.response && error.response.status === 401) {
      // 定義登錄路由對象
      let toPath = {
        name: 'login',
        query: { redirectUrl: router.currentRoute.path }
      } // 跳轉(zhuǎn)對象
      // 如果refresh_token不存在
      if (!store.state.user.refresh_token) {
        router.push(toPath)
        return Promise.reject(error)
      }
      try {
        // 刷新用戶token
        // 應(yīng)該發(fā)送一個(gè)請求 換取新的token
        // 這里不應(yīng)該再用instance  因?yàn)?instance會再次進(jìn)入攔截器  用默認(rèn)的axios
        let result = await axios({
          method: 'put',
          url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
          headers: {
            Authorization: `Bearer ${store.state.user.refresh_token}`
          }
        })
        // 獲取到新token后,就對vuex和localStorage進(jìn)行更新
        store.commit('updateUser', {
          token: result.data.data.token, // 拿到新的token之后
          refresh_token: store.state.user.refresh_token // 將之前 refresh_token 14天有效期
        })
        return instance(error.config) // 把剛才錯(cuò)誤的請求再次發(fā)送出去 然后將promise返回
      } catch (err) {
        // 如果錯(cuò)誤 表示補(bǔ)救措施也沒用了(有可能refresh_token也失效了)
        // 應(yīng)該跳轉(zhuǎn)到登錄頁 并且 把廢掉的用戶信息全都干掉
        store.commit('clearUser') // 所有的用戶信息清空
        router.push(toPath) // 跳轉(zhuǎn)到回登錄頁
        return Promise.reject(err)
      }
    }
    return Promise.reject(error)
  }
)
') // 所有的用戶信息清空
        router.push(toPath) // 跳轉(zhuǎn)到回登錄頁
        return Promise.reject(err)
      }
    }
    return Promise.reject(error)
  }
)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

您可能感興趣的文章:

相關(guān)文章

  • scala中停止循環(huán)的三種方式(推薦)

    scala中停止循環(huán)的三種方式(推薦)

    這篇文章主要介紹了scala中停止循環(huán)的三種方式,文中給大家提到了循環(huán)語句的流程圖,感興趣的朋友可以參考下
    2019-12-12
  • 微信小程序給圖片做動(dòng)態(tài)標(biāo)注的實(shí)例分享

    微信小程序給圖片做動(dòng)態(tài)標(biāo)注的實(shí)例分享

    這篇文章主要介紹了微信小程序給圖片做動(dòng)態(tài)標(biāo)注的一個(gè)簡化的教程,幫助你了解如何在微信小程序中實(shí)現(xiàn)圖片標(biāo)注的功能,需要的朋友可以參考下
    2023-08-08
  • 通過Cursor工具使用GPT-4的方法詳解

    通過Cursor工具使用GPT-4的方法詳解

    Cursor?是集成了?GPT-4?的?IDE?工具,目前免費(fèi)并且無需?API?Key,支持?Win、Mac、Linux?平臺,可以按要求生成代碼,或者讓?AI?幫助優(yōu)化代碼,分析代碼,這篇文章主要介紹了通過Cursor工具使用GPT-4的方法,需要的朋友可以參考下
    2023-05-05
  • 云vscode搭建之使用容器化部署的方法

    云vscode搭建之使用容器化部署的方法

    隨著容器化的發(fā)展,現(xiàn)在涌現(xiàn)出了很多云IDE,比如騰訊的Cloud?Studio,但是其也是基于Code-Server進(jìn)行開發(fā)部署的,用了它的云IDE后,我便產(chǎn)生出了自己部署一個(gè)這樣的云IDE的想法,這篇文章主要介紹了云vscode搭建使用容器化部署,需要的朋友可以參考下
    2022-09-09
  • s49?磁盤存儲文件系統(tǒng)管理詳解

    s49?磁盤存儲文件系統(tǒng)管理詳解

    這篇文章主要為大家介紹了s49?磁盤存儲文件系統(tǒng)管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 手把手教你使用Git(圖文教程)

    手把手教你使用Git(圖文教程)

    這篇文章主要介紹了手把手教你使用Git(圖文教程),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Wireshark?TS系統(tǒng)吞吐慢問題解決方案

    Wireshark?TS系統(tǒng)吞吐慢問題解決方案

    這篇文章主要為大家介紹了Wireshark?TS系統(tǒng)吞吐慢問題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • PostMan接口測試用例自動(dòng)轉(zhuǎn)成Python的測試腳本

    PostMan接口測試用例自動(dòng)轉(zhuǎn)成Python的測試腳本

    PosMan做服務(wù)端的自動(dòng)化測試中,我們可以把Collection里面的測試用例導(dǎo)入出來,它是JSON的文件,然后我們解析這些JSON文件,讓它自動(dòng)的轉(zhuǎn)成Python測試代碼,實(shí)現(xiàn)了PostMan里面的接口測試用例自動(dòng)的轉(zhuǎn)成了Python的測試腳本,而且?guī)Я藬嘌?/div> 2024-06-06
  • hexo博客開啟https的SSL?證書實(shí)現(xiàn)過程

    hexo博客開啟https的SSL?證書實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了hexo?博客開啟https的SSL證書實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • HTTP與HTTPS握手的那些事

    HTTP與HTTPS握手的那些事

    今天我總結(jié)了什么是HTTP三次握手,還有HTTPS握手的過程以及為什么HTTPS是安全的,需要的朋友可以參考下
    2017-05-05

最新評論

依兰县| 微山县| 惠东县| 确山县| 个旧市| 公主岭市| 根河市| 喜德县| 长宁区| 广南县| 泽州县| 漯河市| 理塘县| 银川市| 绥化市| 东阿县| 金昌市| 陵川县| 镇康县| 津南区| 景谷| 浮山县| 泰宁县| 抚州市| 天全县| 河间市| 兴隆县| 阳信县| 屏边| 滨州市| 灌云县| 奈曼旗| 永和县| 平罗县| 大化| 卢湾区| 皮山县| 鹤山市| 延寿县| 察隅县| 黑河市|