在做小程序授權登錄時, 不同的人有不同的實現細節, 導致有各種不一致的描述, 與他人進行溝通討論的時候, 思想很難保持同步。
微信官網登錄時序圖示例
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 過期,還是要注意相關的邏輯。
總結
希望上面的幾個比較重要的點能夠幫助你,同時希望你留言一起討論大家的實現區別,謝謝您的閱讀!