需求:微信小程序登錄綁定系統(tǒng)賬號(hào)互通
https://developers.weixin.qq.com/community/operate/doc/000640bb8441b82900e89f48351401
小程序內(nèi)用戶帳號(hào)登錄規(guī)范調(diào)整和優(yōu)化建議
之前微信授權(quán)登錄時(shí)是直接可以通過getUserInfo接口 彈出授權(quán)彈窗音婶。由于微信官方修改了 getUserInfo 接口行您,所以現(xiàn)在無法實(shí)現(xiàn)一進(jìn)入微信小程序就彈出授權(quán)窗口述召,只能通過 button 去觸發(fā)
微信的官方解釋如下:
https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01
小程序登錄
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
說明:
- 調(diào)用 wx.login() 獲取 臨時(shí)登錄憑證code ,并回傳到開發(fā)者服務(wù)器逼庞。
- 調(diào)用 auth.code2Session 接口,換取 用戶唯一標(biāo)識(shí) OpenID 和 會(huì)話密鑰 session_key。
之后開發(fā)者服務(wù)器可以根據(jù)用戶標(biāo)識(shí)來生成自定義登錄態(tài)慢逾,用于后續(xù)業(yè)務(wù)邏輯中前后端交互時(shí)識(shí)別用戶身份阀圾。
注意:
- 會(huì)話密鑰
session_key
是對(duì)用戶數(shù)據(jù)進(jìn)行 加密簽名 的密鑰哪廓。為了應(yīng)用自身的數(shù)據(jù)安全,開發(fā)者服務(wù)器不應(yīng)該把會(huì)話密鑰下發(fā)到小程序初烘,也不應(yīng)該對(duì)外提供這個(gè)密鑰涡真。 - 臨時(shí)登錄憑證 code 只能使用一次
小程序端 wx.login 獲取code 并 wx.request 提交 code 給己方服務(wù)器
服務(wù)器 提交Appid + appSecret + code 到微信方服務(wù)器 獲取 session_key & openid
服務(wù)器 根據(jù) session_key & openid 生成 3rd_session(微信方提出的基于安全性的考慮,建議開發(fā)者不要將openid等關(guān)鍵性信息進(jìn)行數(shù)據(jù)傳輸) 并返回 3rd_session 到小程序端
小程序端 wx.setStorage 存儲(chǔ) 3rd_session 在后續(xù)用戶操作需要憑證時(shí) 附帶該參數(shù)
小程序端 wx.getUserInfo 獲取用戶信息 + wx.getStorage 獲取 3rd_session 數(shù)據(jù)后肾筐,一并 wx.request 提交給己方服務(wù)器
服務(wù)器 SQL 用戶數(shù)據(jù)信息更新
后端:
--- 登錄憑證校驗(yàn)
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
--- 通過該接口生成的小程序碼综膀,永久有效,數(shù)量暫無限制
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html
后端緩存的局齿,考慮個(gè)情況剧劝,切換微信賬號(hào)登錄