小程序官方文檔中說道:
調用wx.login接口獲取登錄憑證(code)進而換取用戶登錄態信息,包括用戶的唯一標識(openid)及本次登錄的會話密鑰(session_key)。調用wx.getUserInfo接口將返回的數據會包含 encryptedData, iv 等敏感信息。用戶數據的加解密通訊需要依賴會話密鑰完成。
UnionID機制說明:
如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程序),可通過unionid來區分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號(包括小程序),用戶的unionid是唯一的。換句話說,同一用戶,對同一個微信開放平臺下的不同應用,unionid是相同的。
小程序登錄主要作用是獲取用戶信息,主要用到兩個API,一個是wx.login獲取用戶的jscode,再通過服務器端用jscode去獲取用戶的openid與session_key。openid是用戶在小程序公眾平臺的唯一標識,注意,是小程序公眾平臺內,而不是所有公眾平臺內,即如果在服務號或訂閱號公眾平臺,就可能會有跟此用戶同樣openid的用戶,如果要微信所有公眾平臺某個用戶的唯一標識,就只能用unionid了。session_key是用戶的密鑰,用于解密用戶敏感數據。另一個wx.getuserInfo就是為了獲取到用戶的加密敏感數據與偏移量iv,偏移量再加上之前的session_key就能解密用戶的敏感數據了。
官方提供的登錄流程圖:
下面是主要步驟流程:
步驟流程結合的詳細流程圖:
小程序客戶端發起的調用:
wx.login({ success: function (res) { var jscode = res.code; wx.getUserInfo({ success: function (res) { var option = { url: config.ghost+config.UrlApi.app_userlogin_url, method:'POST', data: { "obj":{ "encryptedData": res.encryptedData, "iv": res.iv, "jscode": jscode }, "UserCode": "", "EncryptUserCode": config.gencryptCusCode, "AppType":config.gapptype, "CompanyKey":config.gcompanyKey, "ShopID":config.gshopID } }; utils.ClientRequest(option, function (res) { console.log(res); if(res.data.Body.Code=="1"){ //成功 var resData = res.data.Body.Data; //初始化 that.setConfigUser(resData); //把Clientkey存緩存 storage.setStorageData(config.storageKey.Userkey,resData.clientkey); } else{ console.log(res); wx.navigateTo({url: "../loginfail/loginfail"}); } }, function (res) { console.log(res); wx.navigateTo({url: "../loginfail/loginfail"}); } ); }, fail: function () { // 拒絕操作 wx.naviga |