国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于 Token 過期問題的兩種解決方案

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于 Token 過期問題的兩種解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?對(duì)于token過期,我們有兩種方案:

?

方案一:當(dāng)我們操作某個(gè)需要token作為請(qǐng)求頭的接口時(shí),返回的數(shù)據(jù)錯(cuò)誤error.response.status === 401,說明我們的token已經(jīng)過期了。

我們希望當(dāng)響應(yīng)返回的數(shù)據(jù)是401身份過期時(shí),讓當(dāng)前瀏覽頁面強(qiáng)行跳轉(zhuǎn)到登入頁面,讓用戶手動(dòng)更新token。拿到最新的token值后再跳回之前瀏覽的頁面。增強(qiáng)用戶體驗(yàn)。

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

阻攔響應(yīng)器中配置:

// 阻攔響應(yīng)器
request.interceptors.response.use(function (response) {
  return response
}, async function (error) {
  if (error.response && error.response.status === 401) {
    // token續(xù)簽方式1:
    //清空當(dāng)前vuex保存的token(我們這的vuex和本地已經(jīng)建立了關(guān)系,相當(dāng)于也清空了本地token)
     store.commit('upUser', '')
     console.log(router.currentRoute.fullPath)// 當(dāng)前路由的完整路徑(#后面的)
      //這里我們采用?path=的方式保存當(dāng)前瀏覽頁面的完整路徑,
    // push()會(huì)產(chǎn)生歷史記錄 而replace不會(huì)有歷史記錄
     router.push({ path: `/login?path=${router.currentRoute.fullPath}` })

  }
  return Promise.reject(error)
})

再登入組件中給登入功能函數(shù)添加:

?this.$router.replace({
? ? ? ? ? path: this.$route.query.path || '/'
? ? ? ? })

// 1.點(diǎn)擊登入
    async onSubmit () {
      try {
        const { data: res } = await loginAPI(this.user)
        //登錄成功
        // 不嚴(yán)謹(jǐn)?shù)姆祷厣洗螢g覽的頁面
        // this.$router.back()
        // 推薦方式:
        // 登錄后, 判斷有未遂地址(有未遂地址的情況是:token過期,在阻攔響應(yīng)器中實(shí)現(xiàn)對(duì)未遂地址的保存), 登入成功后跳轉(zhuǎn)到未遂地址, 否則去/路徑(跳到首頁--這種情況是:用戶主動(dòng)前往登入頁面的登入,沒有未遂地址,登入成功后直接前往首頁)
        // replace不會(huì)產(chǎn)生路由歷史記錄
        this.$router.replace({
          path: this.$route.query.path || '/'
        })
        // 存儲(chǔ)獲取過來的token
        this.$store.commit('upUser', res.data)
      } catch (err) {
        console.log(err)
        if (err.response.status === 400) {
          this.$toast.fail('手機(jī)號(hào)或驗(yàn)證碼錯(cuò)誤')
        } else {
          this.$toast.fail('登入失敗,請(qǐng)稍后再試') // 可能由于網(wǎng)絡(luò)問題導(dǎo)致的登入失敗
        }
      }
    },

方案二:實(shí)現(xiàn)用戶無感知的刷新token值,我們希望當(dāng)響應(yīng)返回的數(shù)據(jù)是401身份過期時(shí),響應(yīng)阻攔器自動(dòng)幫我們刷新token值,而不是讓用戶手動(dòng)更新token。拿到最新的token值后再重新發(fā)起剛剛因token過期的請(qǐng)求。從而實(shí)現(xiàn)無感知

前提是有后臺(tái)的配合:

登入后后臺(tái)接口返回值要求:必須提供刷新token的令牌

token過期,vue2+vue3,頭條項(xiàng)目經(jīng)驗(yàn),前端,javascript,開發(fā)語言

并且后臺(tái)提供了刷新token的接口: (請(qǐng)求頭要求是refresh_token)

token過期,vue2+vue3,頭條項(xiàng)目經(jīng)驗(yàn),前端,javascript,開發(fā)語言

注意:1. 在請(qǐng)求響應(yīng)器中做判斷在非刷新token的時(shí)候,給請(qǐng)求頭配置token,而刷新token的時(shí)候,我們自己手動(dòng)添加請(qǐng)求頭為refresh_token

2.refresh_token也有過期的時(shí)候,這時(shí)只能強(qiáng)行讓用戶自己重新登入了

// 刷新用戶token
export const updataTokenAPI = function () {
  return request({
    method: 'PUT',
    url: '/v1_0/authorizations',
    headers: {
      Authorization: `Bearer ${store.state.user.refresh_token}`
    }
  })
}

實(shí)現(xiàn)原理:?

import request from '@/utils/request'
import store from '@/store'

// 請(qǐng)求響應(yīng)器
request.interceptors.request.use(function (config) {
  // config :本次請(qǐng)求的配置對(duì)象
  // config 里面有一個(gè)屬性:headers
  const { user } = store.state
//請(qǐng)求頭未配置信息的時(shí)候才會(huì)配置
  if (user.token && config.headers.Authorizatio === undefined) {
    config.headers.Authorization = `Bearer ${user.token}`
  }
  // 這里必須將config返回出去,否則請(qǐng)求會(huì)停在這 里
  return config
}, function (error) {
  // 如果請(qǐng)求出錯(cuò)(還沒發(fā)送出去,可能是代碼寫錯(cuò)了的問題),就會(huì)進(jìn)入這里
  return Promise.reject(error)
})

// 阻攔響應(yīng)器
request.interceptors.response.use(function (response) {
  return response
}, async function (error) {
  if (error.response && error.response.status === 401) {
    // token續(xù)簽方式2: refreshToken(用戶無感知)
    // 將過期的token值清空
    store.commit('updataToken', '')
    //請(qǐng)求刷新token接口
    const { data: res } = await updataTokenAPI()
    //保存新的token值
    store.commit('updataToken', res.data.token)
    // 再調(diào)用一次未完成的請(qǐng)求啊(用戶無感知)
    // error.config 就是上一次axios請(qǐng)求的配置對(duì)象
    // console.dir(error.config)
    // 把新的token賦予到下一次axios請(qǐng)求的請(qǐng)求頭中
    error.config.headers.Authorization = 'Bearer ' + res.data.token
    // return到await的地方,將未完成的請(qǐng)求再次發(fā)起,
    return axios(error.config)
  } else if (error.response.status === 500 && error.config.url === '/v1_0/authorizations') {
    // 因?yàn)?00的情況有很多種,refresh_token失效也是其中一種情況,所有再加上error.config.url === '/v1_0/authorizations'條件,確保是refresh_token失效情況
    // 清空所有的token和refresh_toekn,并且強(qiáng)制跳轉(zhuǎn)登錄頁面
    store.commit('upUser', {})
    router.push({ path: '/login' })
    Toast.fail('身份已過期')
  }
  return Promise.reject(error)
})

token過期,vue2+vue3,頭條項(xiàng)目經(jīng)驗(yàn),前端,javascript,開發(fā)語言?文章來源地址http://www.zghlxwxcb.cn/news/detail-798570.html

到了這里,關(guān)于關(guān)于 Token 過期問題的兩種解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • error: (-215:Assertion failed)的兩種解決方案

    問題描述:在對(duì)視頻分幀讀取進(jìn)行差值哈希算法比較時(shí)出現(xiàn)讀取錯(cuò)誤現(xiàn)象,具體代碼內(nèi)容和報(bào)錯(cuò)如下: 而在差值哈希算法運(yùn)行前,均值哈希算法可以正常運(yùn)行: 反復(fù)仔細(xì)觀察上述兩段代碼之后判斷是img圖片路徑讀取失敗,下方為兩種解決方法: 1. 刪除報(bào)錯(cuò)語句的下方部分:

    2024年02月15日
    瀏覽(24)
  • 解決Windows Defender安全中心打開空白的兩種方案

    有網(wǎng)友加粉絲群詢問自己的 Windows 10 操作系統(tǒng)中的 Windows Defender 安全中心打開后出現(xiàn)頁面空白情況,而之前自己也沒有碰到過這種問題。既然問題來了,那就幫助找下解決方案,目前網(wǎng)絡(luò)上其實(shí)也有給出一些解決方案,絕大部分是通過注冊(cè)表方式來進(jìn)行解決。不過有些網(wǎng)友表

    2024年02月10日
    瀏覽(25)
  • SpringBoot+Vue項(xiàng)目中遇到Not allowed to load local resource圖片路徑問題的兩種解決方案(在后端映射本地路徑或?qū)D片轉(zhuǎn)base64返回給前端)

    SpringBoot+Vue項(xiàng)目中遇到Not allowed to load local resource圖片路徑問題的兩種解決方案(在后端映射本地路徑或?qū)D片轉(zhuǎn)base64返回給前端)

    后端映射本地路徑 轉(zhuǎn)base64格式返回 如果是少量圖片可以這么操作,不然圖片多的話返回base64由于字符太長,傳輸速度很慢,會(huì)導(dǎo)致卡頓現(xiàn)象、加載慢、加載異常等情況出現(xiàn)。 圖片轉(zhuǎn)base64 base64轉(zhuǎn)圖片保存 headPhotoPath = “D:yangleProjectImageLocationheadPhoto” userPhotoPath = “nologin”

    2024年02月06日
    瀏覽(25)
  • Android原生鍵盤彈起,H5頁面被壓縮的兩種解決方案

    移動(dòng)H5項(xiàng)目中,會(huì)出現(xiàn)input框獲得焦點(diǎn)鍵盤彈出把頁面元素頂上去壓縮到一起,影響頁面布局. 方案一:監(jiān)聽頁面變化,動(dòng)態(tài)的展示和隱藏底部被頂上來的內(nèi)容 這種方法經(jīng)調(diào)試還不算十分完美 方案二:監(jiān)聽頁面變化,鍵盤彈起時(shí)將變化之前的高度賦值給壓縮后的頁面 ? ? ? ? 這種

    2024年02月16日
    瀏覽(16)
  • Qt QWidget 設(shè)置樣式表不生效的兩種解決方案

    Qt QWidget 設(shè)置樣式表不生效的兩種解決方案

    在進(jìn)行Qt開發(fā)的時(shí)候,我們往往會(huì)遇到這樣的場(chǎng)景: ????????使用Qt Designer 設(shè)計(jì)界面,但在Qt Designer里設(shè)置好樣式表,使用快捷鍵 shift + alt + r 進(jìn)行預(yù)覽,樣式都是正常的,但程序運(yùn)行起來,樣式就不生效了。 例如設(shè)計(jì)一個(gè)列表,我們將一條數(shù)據(jù)(一行)設(shè)計(jì)設(shè)計(jì)成一個(gè)類

    2023年04月10日
    瀏覽(34)
  • 本機(jī)遠(yuǎn)程Windows服務(wù)器遠(yuǎn)程桌面不能相互復(fù)制粘貼的兩種解決方案

    本機(jī)遠(yuǎn)程Windows服務(wù)器遠(yuǎn)程桌面不能相互復(fù)制粘貼的兩種解決方案

    首先我們連接遠(yuǎn)程桌面得時(shí)候需要設(shè)置一下剪貼板,如果不設(shè)置的話不管怎么復(fù)制都是不行的 這個(gè)D盤就是自己電腦的D盤 可以在Windows系統(tǒng)之間相互拷貝 設(shè)置完了之后可以去試試是否可以正常復(fù)制粘貼,如果不行的話繼續(xù)使用按照方案二進(jìn)行操作 打開遠(yuǎn)程windows服務(wù)器的任務(wù)

    2024年02月12日
    瀏覽(21)
  • postman中設(shè)置token的兩種方式

    postman中設(shè)置token的兩種方式

    一、設(shè)置全局變量/環(huán)境變量,傳遞token 在獲取token接口中,將接口返回的token值賦值給設(shè)置的變量 在其他接口中,引用該變量 二、通過預(yù)請(qǐng)求腳本,動(dòng)態(tài)獲取token 設(shè)置一個(gè)全局變量 在其他接口的Pre-request Script中編寫腳本 調(diào)用獲取token的接口 將接口返回的token,賦值給設(shè)置的

    2024年02月12日
    瀏覽(12)
  • K8S集群Token過期處理方法以及Kubectl命令無法使用的問題解決

    使用Kubeadm方式部署的K8S集群,在初始化的時(shí)候生成的Token的有效期為1天,當(dāng)過期之后Token就無法使用了,也就意味著,在Node節(jié)點(diǎn)執(zhí)行 kubeadm join 命令加入K8S集群時(shí)就會(huì)失敗,可以通過下面的方法重新生成Token。 1)創(chuàng)建Token

    2024年02月16日
    瀏覽(37)
  • OneNote由于某種原因,無法連接到服務(wù)器請(qǐng)嘗試檢查您的連接以查看服務(wù)器是否可用的兩種解決方案

    OneNote由于某種原因,無法連接到服務(wù)器請(qǐng)嘗試檢查您的連接以查看服務(wù)器是否可用的兩種解決方案

    本來一直在用OneNote記錄東西,點(diǎn)擊同步筆記的時(shí)候,突然冒出 “OneNote由于某種原因,無法連接到服務(wù)器請(qǐng)嘗試檢查您的連接以查看服務(wù)器是否可用” 警告錯(cuò)誤。搗鼓了一會(huì)發(fā)現(xiàn)可以兩種方案解決。 第一種:方法就是科學(xué)上網(wǎng),再次點(diǎn)擊同步筆記就可以了。 第二種:右鍵左下

    2024年02月06日
    瀏覽(34)
  • [flutter]GIF速度極快問題的兩種解決方法

    [flutter]GIF速度極快問題的兩種解決方法

    原因: 當(dāng)GIF圖沒有設(shè)置播放間隔時(shí)間時(shí),電腦上會(huì)默認(rèn)間隔0.1s,而flutter默認(rèn)0s。 解決方法一: 將圖片改為webp格式。 解決方法二: 為圖片設(shè)置幀頻率,添加播放間隔。例如可以使用GIF依賴組件設(shè)置每秒運(yùn)行的幀數(shù)來控制播放速度。 添加依賴組件方法: 打開根目錄的pubspe

    2024年01月20日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包