微信小程序登陆


官方文档

小程序登陆

登陆时序图:

微信小程序前端:


handleGetUserInfo(e) {
    // console.log(e.detail.userInfo);
    if (e.detail.userInfo) {
      // 将用户登陆信息保存到本地
      //console.log("登陆信息:" + e.detail.userInfo);
      wx.setStorageSync('userInfo', e.detail.userInfo);
      this.setData({
        isLogin: true
      })
      wx.login({
        success: function(res){
          let code = res.code;
          request({
            url: "/js/stuquery/login",
            data: code,
            header: {
                "Content-Type":"application/json"
            },
            method: 'POST'
          })
          .then(result => {
            //判断登陆之后,返回的个人信息是否为空,如果个人信息为空的话,说明账号未被绑定,登陆状态不写入本次存储
            if(JSON.stringify(result.data) !== '{}'){
              wx.setStorageSync('student', result.data.student);
            }
          })
        }
      })

      // 刷新页面
      this.onShow();

    } else {
      console.log("用户拒绝授权!");
    }
  }

一般来说,我们登陆的目的是两个:

  1. 登陆之后,获取我们自己服务器上的信息
  2. 微信登陆之后获取微信用户的信息

我尝试过使用wx.login之后获取微信用户的信息,即调用wx.getuserinfo,但是,这会有一个问题,可能会无法获取到用户的授权(按照我们平常的思路应该是,用户点击登陆之后,微信小程序弹出授权弹框)

比如这样:


  login(){
    let _this = this;
    wx.login({
      success: function(res){
        //   1. 获取code
        let code = res.code;
        // console.log(code)
        request({
          url: "/js/stuquery/login",
          data: code,
          header: {
              "Content-Type":"application/json"
          },
          method: 'POST'
      })
      .then(result => {
        // 判断是否绑定了
        wx.setStorageSync('result', result.data);
        wx.setStorageSync('student', result.data.student);

        _this.setData({
          isLogin: true
        })

        wx.getSetting({
          success: function(res){
            // 如果用户没有授权
            console.log(res.authSetting['scope.userInfo'] === undefined);
            if (undefined===res.authSetting['scope.userInfo']) {
              console.log("开始授权");
              wx.authorize({
                scope: 'scope.userInfo',
                success(){
                  console.log('授权完成')
                },
                fail(){
                  console.log("授权失败")
                }
              })
            }else{
              console.log("用户已经授权")
            }
          }
        })
      })
      }
    })
  },

像上面这种做法,不知道是什么原因,wx.authorize无法调起弹框获取用户授权,所以一直是fail的状态