微信小程式授權登入流程總結
阿新 • • 發佈:2019-01-06
1.登陸只需傳送code到後臺,後臺獲取openid,根據openid到資料庫中查詢使用者資訊,若有則返回使用者資訊,若沒有將該openid插入資料庫,
2.後臺生成token(可以是使用者id和其他隨機串組合的加密字串),返回前臺token,和使用者資訊
3.前臺判斷使用者資訊是否包含使用者名稱稱,使用者城市。。。等資訊,若包含則登陸成功
4.若不包含,則呼叫 wx.getUserInfo,傳送encryptedData,iv,token到後臺,後臺根據token找到使用者openid解密encryptedData和iv獲取使用者其他資訊
5.然後更新資料庫,並返回使用者資訊
程式碼和判斷邏輯如下
wx.login({ success: function (r) { var code = r.code;//登入憑證 if (code) { wx.request({ url: config.getFullurl("/onLogin"),//自己的服務登陸介面地址 method: 'POST', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: {code: code }, success: function (data) { //後臺獲取openid,根據openid到資料庫中查詢使用者資訊,若有則返回使用者資訊,若沒有將該openid插入資料庫, //後臺生成token(可以是使用者id和其他隨機串組合的加密字串),返回前臺token,和使用者資訊 //前臺判斷使用者資訊是否包含使用者名稱稱,使用者城市。。。等資訊,若包含則登陸成功 if('存在'){ //將使用者資訊存入全域性變數或者快取中,並展示或者跳轉 } else {//若不存在則呼叫wx.getUserInfo //2、呼叫獲取使用者資訊介面 wx.getUserInfo({ success: function (res) { //console.log({ encryptedData: res.encryptedData, iv: res.iv, code: code}) //3.請求自己的伺服器,解密使用者資訊 獲取unionId等加密資訊 wx.request({ url: config.getFullurl("/updateUserInfo"),//自己的服務更新使用者介面地址 method: 'POST', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { encryptedData: res.encryptedData, iv: res.iv, token:'返回的token' }, success: function (data) { //console.log(data); //後臺根據token找到使用者openid解密encryptedData和iv獲取使用者其他資訊 //4.解密成功後 獲取自己伺服器返回的結果 if (data.data.status == 200) { //將使用者資訊存入全域性變數或者快取中,並展示或者跳轉 } else { console.log('解密失敗') } }, fail: function () { console.log('系統錯誤') } }) }, fail: function () { console.log('獲取使用者資訊失敗') } }) } } }) } else { console.log('獲取使用者登入態失敗!' + r.errMsg) } } })