需求:微信小程序登錄綁定系統賬號互通
https://developers.weixin.qq.com/community/operate/doc/000640bb8441b82900e89f48351401
小程序內用戶帳號登錄規范調整和優化建議
之前微信授權登錄時是直接可以通過getUserInfo接口 彈出授權彈窗。由于微信官方修改了 getUserInfo 接口,所以現在無法實現一進入微信小程序就彈出授權窗口,只能通過 button 去觸發
微信的官方解釋如下:
https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01
小程序登錄
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
說明:
- 調用 wx.login() 獲取 臨時登錄憑證code ,并回傳到開發者服務器。
- 調用 auth.code2Session 接口,換取 用戶唯一標識 OpenID 和 會話密鑰 session_key。
之后開發者服務器可以根據用戶標識來生成自定義登錄態,用于后續業務邏輯中前后端交互時識別用戶身份。
注意:
- 會話密鑰
session_key
是對用戶數據進行 加密簽名 的密鑰。為了應用自身的數據安全,開發者服務器不應該把會話密鑰下發到小程序,也不應該對外提供這個密鑰。 - 臨時登錄憑證 code 只能使用一次
小程序端 wx.login 獲取code 并 wx.request 提交 code 給己方服務器
服務器 提交Appid + appSecret + code 到微信方服務器 獲取 session_key & openid
服務器 根據 session_key & openid 生成 3rd_session(微信方提出的基于安全性的考慮,建議開發者不要將openid等關鍵性信息進行數據傳輸) 并返回 3rd_session 到小程序端
小程序端 wx.setStorage 存儲 3rd_session 在后續用戶操作需要憑證時 附帶該參數
小程序端 wx.getUserInfo 獲取用戶信息 + wx.getStorage 獲取 3rd_session 數據后,一并 wx.request 提交給己方服務器
服務器 SQL 用戶數據信息更新
后端:
--- 登錄憑證校驗
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
--- 通過該接口生成的小程序碼,永久有效,數量暫無限制
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html
后端緩存的,考慮個情況,切換微信賬號登錄