1. 程式人生 > >微信小程式授權登入流程總結

微信小程式授權登入流程總結

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)
    }

  }

})