小程序:小程序授權登錄流程詳解


在做小程序授權登錄時, 不同的人有不同的實現細節, 導致有各種不一致的描述, 與他人進行溝通討論的時候, 思想很難保持同步。

微信官網登錄時序圖示例

wx.login()會刷新 session_key 嗎

下面是我連續3次測試的結果, 可以看出三個不同的 code 得到相同 session_key:

| code | session_key |
| - | - | 
| 061AlTTl1NN1Xk0ZmcUl1iZ0Ul1AlTTi | eTVWziFnhu2vG+iVrjDOqA==
| 071Rl0SD0Dd7Sc2hkkOD0asORD0Rl0SW | eTVWziFnhu2vG+iVrjDOqA==
| 071wl53j2qtQCH0SfKZi2SVN2j2wl53d | eTVWziFnhu2vG+iVrjDOqA==

我決定等待10分鍾之后再去嘗試:

code_xxx LMiKHyNLaGHidXqSsg4Ung==

果然 session_key 發生了變化,這和官網文檔說明符合:

原文:微信不會把session_key的有效期告知開發者。我們會根據用戶使用小程序的行為對session_key進行續期。用戶越頻繁使用小程序,session_key有效期越長。

數據簽名校驗?

簽名算法 signature = sha1( rawData + session_key ) ,意味着兩個參數都相同,或者兩個參數都不同,其簽名才可能一致。所有我一個大膽的嘗試,如果我更改我的性別或者昵稱,那么前端得到的rawData 也會發生變更,session_key 也會發生變更,才能通過簽名驗證。可惜的是我更改了我的用戶信息之后,通過調試發現 rawData 並沒有立即發生變更。

我個人當前的做法

每次涉及到解密用戶信息時,前端都會重新回去授權 code ,服務端使用 code 獲取 session_key,然后再解密。
雖然微信小程序官網有說明 code 的有效期為5分鍾,經過測試發現不止5分鍾(我發現10分鍾也沒過期)。但是為了避免 code 過期,還是要注意相關的邏輯。

總結

希望上面的幾個比較重要的點能夠幫助你,同時希望你留言一起討論大家的實現區別,謝謝您的閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM