小程序官方文檔中說道:
調(diào)用wx.login接口獲取登錄憑證(code)進而換取用戶登錄態(tài)信息,包括用戶的唯一標(biāo)識(openid)及本次登錄的會話密鑰(session_key)。調(diào)用wx.getUserInfo接口將返回的數(shù)據(jù)會包含 encryptedData, iv 等敏感信息。用戶數(shù)據(jù)的加解密通訊需要依賴會話密鑰完成。
UnionID機制說明:
如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(包括小程序),可通過unionid來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的unionid是唯一的。換句話說,同一用戶,對同一個微信開放平臺下的不同應(yīng)用,unionid是相同的。
小程序登錄主要作用是獲取用戶信息,主要用到兩個API,一個是wx.login獲取用戶的jscode,再通過服務(wù)器端用jscode去獲取用戶的openid與session_key。openid是用戶在小程序公眾平臺的唯一標(biāo)識,注意,是小程序公眾平臺內(nèi),而不是所有公眾平臺內(nèi),即如果在服務(wù)號或訂閱號公眾平臺,就可能會有跟此用戶同樣openid的用戶,如果要微信所有公眾平臺某個用戶的唯一標(biāo)識,就只能用unionid了。session_key是用戶的密鑰,用于解密用戶敏感數(shù)據(jù)。另一個wx.getuserInfo就是為了獲取到用戶的加密敏感數(shù)據(jù)與偏移量iv,偏移量再加上之前的session_key就能解密用戶的敏感數(shù)據(jù)了。
官方提供的登錄流程圖:

下面是主要步驟流程:
步驟流程結(jié)合的詳細(xì)流程圖:

小程序客戶端發(fā)起的調(diào)用:
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
|