成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

移動(dòng)端不定期更新token方案

binta / 2242人閱讀

摘要:客戶端需要不定期更新,同時(shí)得保證在發(fā)送更新同時(shí)其他網(wǎng)絡(luò)請(qǐng)求掛起,否則會(huì)報(bào)失效。待新回來(lái)之后,重新發(fā)起掛起的請(qǐng)求。

客戶端需要不定期更新token,同時(shí)得保證在發(fā)送更新token同時(shí)其他網(wǎng)絡(luò)請(qǐng)求掛起,否則會(huì)報(bào)token失效。待新token回來(lái)之后,重新發(fā)起掛起的請(qǐng)求。

應(yīng)服務(wù)端要求,更新token請(qǐng)求時(shí),老token立刻失效

目錄

模擬網(wǎng)絡(luò)請(qǐng)求封裝(模擬)

使用演示

結(jié)果打印

小結(jié)

模擬網(wǎng)絡(luò)請(qǐng)求封裝(模擬)
let token = 1 當(dāng)前請(qǐng)求使用的token
let refreshToken = false // 是否處于更新token中
let subscribers = []; // 掛起的請(qǐng)求數(shù)組

/**
 * 網(wǎng)絡(luò)請(qǐng)求入口
 */
function callApi (data, time = 1000) {
  console.log("0000callApi=== type:" + data.type + "  token:" + token)
  if (refreshToken) {
    const retryOriginalRequest = new Promise((resolve) => {
                addSubscriber(()=> {
                    resolve(request(time, data.type))
                })
            });
            return retryOriginalRequest;
  }
  // 判斷是否是執(zhí)行更新token
  if (data && (data.type == "refreshToken")) {
     const newData = request(time, data.type)
     refreshToken = true
     return newData
  }
  return request(time, data.type)
}

/**
 * 執(zhí)行網(wǎng)絡(luò)請(qǐng)求
 */
function request(ms, type) {
  console.log("1111request=== type:" + type + "  token:" + token)
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, type);
  });
}

/**
 * token更新后,重新發(fā)起掛起的請(qǐng)求
 */
function onAccessTokenFetched() {
    subscribers.forEach((callback)=>{
        console.log("重新請(qǐng)求")
        callback();
    })
    refreshToken = false
    subscribers = [];
}

/**
 * push掛起的請(qǐng)求
 * @param callback 掛起的請(qǐng)求
 */
function addSubscriber(callback) {
    subscribers.push(callback)
}
使用演示:
// before
callApi({type: "first", token}, 1000).then(consoleResponse)

// Todo
callApi({type: "refreshToken", token}, 2000).then((v) => {
  token = 2
  onAccessTokenFetched()
  consoleResponse(v)
})

// doing
callApi({type: "second", token}, 2000).then(consoleResponse)
callApi({type: "third", token}, 2000).then(consoleResponse)
callApi({type: "four", token}, 2000).then(consoleResponse)
callApi({type: "five", token}, 2000).then(consoleResponse)

// after
setTimeout(() => callApi({type: "six", token}, 2000).then(consoleResponse), 5000)


function consoleResponse (v) {
  console.log("2222response===type:" + v + " token:" + token)
}
結(jié)果打印
"0000callApi=== type:first  token:1"
"1111request=== type:first  token:1"
"0000callApi=== type:refreshToken  token:1"
"1111request=== type:refreshToken  token:1"
"0000callApi=== type:second  token:1"
"0000callApi=== type:third  token:1"
"0000callApi=== type:four  token:1"
"0000callApi=== type:five  token:1"
"2222response===type:first token:1"
"重新請(qǐng)求"
"1111request=== type:second  token:2"
"重新請(qǐng)求"
"1111request=== type:third  token:2"
"重新請(qǐng)求"
"1111request=== type:four  token:2"
"重新請(qǐng)求"
"1111request=== type:five  token:2"
"2222response===type:refreshToken token:2"
"2222response===type:second token:2"
"2222response===type:third token:2"
"2222response===type:four token:2"
"2222response===type:five token:2"
"0000callApi=== type:six  token:2"
"1111request=== type:six  token:2"
"2222response===type:six token:2"
小結(jié)

本案例主要是模擬流程,算是對(duì)這次改造封裝網(wǎng)絡(luò)請(qǐng)求的思路,不對(duì)地方各位大神多多指點(diǎn)

真正用于網(wǎng)絡(luò)請(qǐng)求的過(guò)程中,需要對(duì)請(qǐng)求超時(shí)和請(qǐng)求出錯(cuò)的處理,超時(shí)和出錯(cuò)都需要重置更新token標(biāo)識(shí),重起發(fā)起掛起的網(wǎng)絡(luò)請(qǐng)求

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106936.html

相關(guān)文章

  • API網(wǎng)關(guān)設(shè)計(jì)(一)之Token多平臺(tái)身份認(rèn)證方案

    摘要:網(wǎng)關(guān)設(shè)計(jì)一之多平臺(tái)身份認(rèn)證方案隨著的發(fā)展現(xiàn)如今早已不是當(dāng)年的登陸單一模式,而不久的到來(lái)又會(huì)帶來(lái)無(wú)人車等其他設(shè)備的接入。所以為了應(yīng)對(duì)將來(lái)的時(shí)代的變化,一個(gè)好的多平臺(tái)認(rèn)證登陸方案是切實(shí)所需。 API網(wǎng)關(guān)設(shè)計(jì)(一)之Token多平臺(tái)身份認(rèn)證方案 隨著4g的發(fā)展現(xiàn)如今早已不是當(dāng)年的web登陸單一模式,而不久5g的到來(lái)又會(huì)帶來(lái)無(wú)人車等其他設(shè)備的接入。所以為了應(yīng)對(duì)將來(lái)的時(shí)代的變化,一個(gè)好的多平臺(tái)認(rèn)...

    leon 評(píng)論0 收藏0
  • 優(yōu)秀博文收藏(定期更新

    摘要:我的書簽我的書簽謹(jǐn)慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標(biāo)注工具模擬請(qǐng)求類深入淺出布局你所不知道的動(dòng)畫技巧與細(xì)節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹(jǐn)慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...

    sunsmell 評(píng)論0 收藏0
  • 優(yōu)秀博文收藏(定期更新

    摘要:我的書簽我的書簽謹(jǐn)慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標(biāo)注工具模擬請(qǐng)求類深入淺出布局你所不知道的動(dòng)畫技巧與細(xì)節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹(jǐn)慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...

    zhangfaliang 評(píng)論0 收藏0
  • 前后分離——token超時(shí)刷新策略

    摘要:實(shí)現(xiàn)目標(biāo)延長(zhǎng)過(guò)期時(shí)間活躍用戶在過(guò)期時(shí),在用戶無(wú)感知的情況下動(dòng)態(tài)刷新,做到一直在線狀態(tài)不活躍用戶在過(guò)期時(shí),直接定向到登錄頁(yè)登錄返回字段如何簽發(fā),請(qǐng)看上一篇推文,這里不做過(guò)多介紹。如果你有更好的做法,歡迎留言告知我,謝謝啦。 前言 記錄一下前后端分離下————token超時(shí)刷新策略! 需求場(chǎng)景 昨天發(fā)了一篇記錄 前后端分離應(yīng)用——用戶信息傳遞 中介紹了token認(rèn)證機(jī)制,跟幾位群友討論了...

    hatlonely 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<