国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

后續(xù)請求都要帶上 token ?

genedna / 983人閱讀

摘要:正經(jīng)寫文章平時開發(fā)里,先請求一個,然后后面的請求都要帶上這個來進(jìn)行認(rèn)證或者授權(quán),是一個常見的需求那要怎么搞呢還是一個先后,控制異步流程的的問題,就是先拿到再進(jìn)行后面的請求就好了。

正經(jīng)寫文章

平時開發(fā)里,先請求一個 token ,然后后面的請求都要帶上這個 token 來進(jìn)行認(rèn)證或者授權(quán),是一個常見的需求

那要怎么搞呢?還是一個先后,控制異步流程的的問題,就是先拿到 token 再進(jìn)行后面的請求就好了。相信 promise 大家已經(jīng)用得很泛濫了:

let tokenPromise = new Promise(...) // 拿到 token
tokenPromise.then()... // 拿到 token 后去拿數(shù)據(jù)1
tokenPromise.then()... // 拿到 token 后去拿數(shù)據(jù)2
tokenPromise.then()... // 拿到 token 后去拿數(shù)據(jù)3
...

如果向上面這樣組織那就完全沒問題了。但是實際上一般也不會這樣寫吧,好蠢。。。但是計算機(jī)就是用來幫我們做這種蠢的重復(fù)性工作的,我們稍微變通一下,原理還是一樣,只是代碼寫好看或者寫少一點(diǎn)就好了

假設(shè)我們都是用 XMLHttpRequest 來發(fā)起請求的話(誰能告訴我為什么XML是大寫Http卻不是。。。),我們可以在 xhr.send() 上做點(diǎn)手腳,把這個函數(shù)再包多一層,在里面叫它幫我們調(diào)用 tokenPromise.then()。先做好準(zhǔn)備工作:

首先我先用 easy-mock 模擬了兩個接口,一個返回 token,一個返回 message

https://easy-mock.com/mock/5b8fea568eee36669a6b5523/example/token
{
  "data": {
    "token": "a_mock_token"
  }
}

https://easy-mock.com/mock/5b8fea568eee36669a6b5523/example/message
{
  "data": {
    "message": "你好"
  }
}

然后用 jQuery 的 ajax 發(fā)請求(只要是用了 XMLHttpRequest 對象,都o(jì)k):

接下來可以寫代碼了

// 先拿 token
var tokenPromise = new Promise((resovle, reject) => {
  // 清除緩存里的token
  localStorage.removeItem("token")
  $.ajax({
    type: "GET",
    url: "https://easy-mock.com/mock/5b8fea568eee36669a6b5523/example/token",
    success(res) {
      let token = res.data.token
      localStorage.setItem("token", token)
      resovle(token)
    },
    fail(err) {
      reject(err)
    }
  })
})

// 對 xhr.send 再包多一層
var originSend = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = function () {
  var args = arguments
  var self = this
  var fn = function () {
    var token = localStorage.getItem("token")
    // 假如把 token 放在請求頭里
    self.setRequestHeader("token", token)
    console.log("后續(xù)請求token: ", token)
    originSend.apply(self, args)
  }
  // tokenPromise resolved 了才會執(zhí)行后續(xù)的請求
  tokenPromise.then(fn)
}

// 后續(xù)其他請求, Network 看一下,請求已經(jīng)帶上 token 了
$.ajax({
  type: "GET",
  url: "https://easy-mock.com/mock/5b8fea568eee36669a6b5523/example/message",
  success(res) {
    console.log(res)
  },
  fail(err) {
    console.log(err)
  }
})

完整的代碼

當(dāng)然這只是一個大概的思路,你要用 axios 而不用 $.ajax ,或者是在小程序里對 wx.request() 包多一層而不是對 xhr.send() 包多一層都是類似的。希望我們能寫出更多野雞的寫法

自言自語

最近在認(rèn)真學(xué)習(xí) promise,覺得 史上最易讀懂的 Promise/A+ 完全實現(xiàn) 這篇文章真的挺棒的,起碼能看懂一點(diǎn)了

然后有看到 fly (一個類似于axios的ajax庫)直接就把我們上述這個先請求 token 的功能寫在文檔里了,并且這個作者還寫了一個 Ajax-hook 來攔截 ajax 請求

所以就強(qiáng)行給博客拔拔草 :D

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97458.html

相關(guān)文章

  • App架構(gòu)設(shè)計經(jīng)驗談:接口的設(shè)計

    摘要:安全機(jī)制的設(shè)計現(xiàn)在,大部分的接口都采用架構(gòu),最重要的一個設(shè)計原則就是,客戶端與服務(wù)器的交互在請求之間是無狀態(tài)的,也就是說,當(dāng)涉及到用戶狀態(tài)時,每次請求都要帶上身份驗證信息。 App與服務(wù)器的通信接口如何設(shè)計得好,需要考慮的地方挺多的,在此根據(jù)我的一些經(jīng)驗做一些總結(jié)分享,旨在拋磚引玉。 安全機(jī)制的設(shè)計 現(xiàn)在,大部分App的接口都采用RESTful架構(gòu),RESTFul最重要的一個設(shè)計原則就...

    zombieda 評論0 收藏0
  • jwt前后端整合方案

    摘要:到這里,基于的前后端分離實現(xiàn)方案就搞定啦四關(guān)于的一些思考實際上,在使用的過程中有一個比較致命的缺點(diǎn),就是一旦簽發(fā)了,在到期之前就會始終有效,除非服務(wù)器部署額外的邏輯。結(jié)語以上是關(guān)于基于的前后端分離實現(xiàn)方案的總結(jié)和思考。 一、jwt是什么 JWT全稱, JSON Web Token,是一個以JSON為基準(zhǔn)的標(biāo)準(zhǔn)規(guī)范。 舉例:服務(wù)器認(rèn)證以后,生成一個 JSON 對象,發(fā)回給用戶,就像下...

    nevermind 評論0 收藏0
  • Vue路由之JWT身份認(rèn)證

    摘要:路由之身份認(rèn)證一身份認(rèn)證簡介是目前最流行的跨域身份驗證解決方案,相較于機(jī)制,服務(wù)器就不需要保存任何數(shù)據(jù)了,也就是說,服務(wù)器變成無狀態(tài)了,從而比較容易實現(xiàn)擴(kuò)展。 Vue路由之JWT身份認(rèn)證 一、JWT身份認(rèn)證簡介 JSON Web Token(JWT)是目前最流行的跨域身份驗證解決方案,相較于session機(jī)制,服務(wù)器就不需要保存任何 session 數(shù)據(jù)了,也就是說,服務(wù)器變成無狀態(tài)...

    he_xd 評論0 收藏0
  • 【Geek議題】合理的VueSPA架構(gòu)討論(上)

    摘要:下面也是以模塊的模塊集為例,可以發(fā)現(xiàn)和路由有一些不同就是這里為了防止模塊跟全局耦合,運(yùn)用函數(shù)式編程思想類似于依賴注入,將全局的實例作為函數(shù)參數(shù)傳入,再返回出一個包含的對象,這個導(dǎo)出的對象將會被以模塊名命名,合并到全局的集中。 前言 web前端發(fā)展到現(xiàn)代,已經(jīng)不再是嚴(yán)格意義上的后端MVC的V層,它越來越向類似客戶端開發(fā)的方向發(fā)展,已獨(dú)立擁有了自己的MVVM設(shè)計模型。前后端的分離也使前端人...

    worldligang 評論0 收藏0
  • 【Geek議題】合理的VueSPA架構(gòu)討論(上)

    摘要:下面也是以模塊的模塊集為例,可以發(fā)現(xiàn)和路由有一些不同就是這里為了防止模塊跟全局耦合,運(yùn)用函數(shù)式編程思想類似于依賴注入,將全局的實例作為函數(shù)參數(shù)傳入,再返回出一個包含的對象,這個導(dǎo)出的對象將會被以模塊名命名,合并到全局的集中。 前言 web前端發(fā)展到現(xiàn)代,已經(jīng)不再是嚴(yán)格意義上的后端MVC的V層,它越來越向類似客戶端開發(fā)的方向發(fā)展,已獨(dú)立擁有了自己的MVVM設(shè)計模型。前后端的分離也使前端人...

    pepperwang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<