**:
最近這段時間我尋思著把幾個月前爬下來的6萬多首詩詞曲文做成乙個api,免費開放給大家用。
這麼做的原因有三:
說寫就寫吧,前幾天就開工了,用了的dingo/api和tymondesigns/jwt-auth來做,不過過程中發現很多坑,而且這些坑大部分都需要自己去填,這樣寫下來,真的是很不爽。
我真的不是想貶低tymondesigns/jwt-auth,這是乙個很好的擴充套件包,提高了效率。但是,真的很不好用,我不知道作者是不是真的用過這個庫實現過一些api的demo,我就隨便舉個栗子,比如說客戶端請求併發的問題。
說這個問題前,先普及一些概念。
由於jwt推薦token過期時效盡量不要太長,比如1至2小時都是可以的,那麼為了盡量減輕客戶端主動請求重新整理token的操作,可以在每次客戶端發起需要驗證token的請求時,對舊token進行重新整理,新token會以 authorization: bearer 頭的形式新增到http響應頭中,因為開啟了黑名單,舊的token會在重新整理完成後,被加入黑名單,也就不能再次使用了。
當客戶端請求併發的時候,問題就來了,請求的處理完成速度肯定會有先後,當前乙個請求處理完成後,token已經重新整理了,後乙個請求拿著乙個已經被加入黑名單的token問伺服器要資料,此時請求只會被拒絕。
如下所示,併發請求:
用第三方包圖的就是方便,結果還要去翻issues,看看別人是怎麼用的,著實惱火。
不過最新的1.0dev版本增加了jwt_blacklist_grace_period配置,設定乙個黑名單寬限時間,允許在遇到併發請求的時候,避免上述的情況,不過這個方案我認為不能根本上的解決併發的問題,而且我個人已經不想在花時間給未來可能帶來的問題上了。
所以,你們也就知道我要幹什麼了,別人的輪子不好用,不順手,只有自己擼輪子了。
這篇教程我會分為三個部分來寫:
準備步驟,包括從如何設定命名空間,到建立serviceprovider,以及如何讓lumen讀取擴充套件包配置檔案,簡單測試是否能夠讀取配置等。
實現jwt,包括生成token,校驗token,重新整理token,黑名單等,不過這部分我會根據自己的喜好進行設計。
為lumen整合jwt使用者認證功能。
發布擴充套件包到packagist,讓別人能夠通過composer輕鬆的把我們的擴充套件包整合到自己的專案中去。
第一部分的**在我寫這篇序的時候已經完成了。
最後每個部分的**我都會以tutorial-1、tutorial-2、tutorial-3、tutorial-4、tutorial-5分支的形式上傳到github中。
master分支會存放完成後的擴充套件包**。
2023年9月23日 01:41:22
由於jwt實現篇幅太長,jwt實現拆分成:
2023年9月30日 08:28:22
這個系列已經完結了,不過我會增加乙個編寫artisan 來實現命令列生成秘鑰的章節。
github lsxiao/jwt-auth,點選前往。
從零實現 SD卡
cubemx軟體版本是v4.23.0,晶元型號是stm32f103zet6,sd卡是閃迪的64g tf卡,然後用了轉大卡的卡槽。我起初是按照原子的實驗去做,先驗證自己的sd卡是好使的。我買的閃迪64g tf卡,用tf卡轉sd卡槽,充當sd卡。stm32f103支援sdio,這個sdio就如同fmc支...
React從零實現 元件渲染和setState
在react中元件大體分為兩種,一種是乙個純函式,沒有生命週期的。另乙個通過繼承自react.component的類來實現。我們先來寫乙個component類。class component setstate partialstate this.state,partialstate updateco...
從零實現 CAN通訊 回環模式測試
can是controller area network的縮寫,是iso國際標準化的序列通訊協議。是德國博世公司開發面向汽車的can通訊協議。can控制器根據兩根線上的電位差來判斷匯流排電平。匯流排電平分為顯性電平和 電平,二者必居其一。can協議具有以下特點 1.多主控制,在匯流排空閒時多個單元都可...