小程序登录的逻辑

逻辑思路如下:

调用wx.login 拿到 code 然后通过w.getUserInfo()拿到res.encryptedData, res.iv, 之后把code ,iv ,加密数据提交给我们自己的服务器服务器sdk 比对校验之后就完成了 登录逻辑 。

requestLogin: function (cb, fb) { //不成功则失败
    var that = this

    console.debug("回调",cb, fb);
    if (that.isLogin()) {
      typeof cb == "function" && cb(this.globalData.userInfo)
    } else {
      //调用登录接口
      wx.login({

        success: function (res) {
          var code = res.code;

          if (typeof (code) == "undefined" || code == "the code is a mock one") {
            res.errMsg = "  APPID未配置js_code无法获取"
    
            if (!utils.isUndefined(fb)) {
              fb(res);
            }

            return;
          }


          console.debug("wx-Login", res);
          wx.getUserInfo({
            success: function (res) {
              console.debug("wx-getUserInfo", res);
              that.login(code, res.encryptedData, res.iv, cb, fb);
            },
            fail: function (res) {
              console.debug("获取用户名出错", fb);

  
              if (!utils.isUndefined(fb)) {
                fb(res)
              }

            }

          });
        },
        fail: function (res) {
  
          if (!utils.isUndefined(fb)) {
            fb(res);
          }
          console.debug("登录出错");
        }
      });
    }

  },
  login: function (code, encryptedData, iv, cb, fb) {
    var that = this;
    var urls = require("/utils/urls.js");
    var utils = require("/utils/util.js");
    //

    var url = urls.LOGIN_URL + "&code=" + encodeURIComponent(code) +
      "&iv=" + encodeURIComponent(iv) + "&encryptedData=" + encodeURIComponent(encryptedData);
    console.debug("url", url);
    utils.request(url, function (res) {
      console.debug("login_server_result_str", res);
      if (!utils.isJsonObject(res.data)) {
        res.data = utils.jsonParseObject(res.data);
      }
      if (res.data.resoures == 1) {

        that.globalData.userInfo = res.data;
        wx.setStorageSync("userInfo", that.globalData.userInfo);
        typeof cb == "function" && cb(res)
      } else {
        res.errMsg = "qssqcheck server fail " + res.errMsg;
        fb(res);
      }
    }, function (res) {
      console.debug("fail_", res);
      res.errMsg = res.errMsg + " at login qssqserver err";
      fb(res);
    });

  },

可以看出来与app不同,这个是不需要传递 openid的 只需要把code, iv, 和加密数据提交上去就行了。

你可能感兴趣的:(小程序登录的逻辑)