快速切换tab导致wx.getSetting拿不到已经授权的信息
发布于 6 年前 作者 jingyi 4939 次浏览 来自 问答

有三个tab页:home、product、 center。每个tab页的onShow都有下面这段代码

onShow: function () {
  // 授权用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权用户信息,不再弹出自定义授权弹框
          this.setData({
            authInfoDlg: false
          })
        } else {
          // 没有授权,弹出自定义授权弹框
          this.setData({
            authInfoDlg: true
          })
        }
      }
    })
}

authInfoDlg 控制一个自定义授权弹框,下面是这个弹框的部分代码。

<button class='auth-dlg-btn btn-solid-org' open-type="getUserInfo" lang='zh_CN' bindgetuserinfo="_getUserInfo">点击授权</button>
 
_getUserInfo (e) {
    if (e.detail.userInfo) {
      console.log(e)
      // 关闭自定义授权弹框
      this.setData({
        authInfoDlg: false
      })
      // 保存unionId
      let { rawData: raw_data, signature, encryptedData: encrypted_data, iv } = e.detail
      wx.$ajax('user/saveUserUnionId', {
        raw_data,
        signature,
        encrypted_data,
        iv
      })
       
      if (this.authSuccess) {
        this.authSuccess();
      }
    }
  }

   

当进入到首页时,弹出自定义授权弹框(图一),点击授权,调起微信用户信息授权弹框(图二),点击允许。

授权之后,除非手动清除授权信息,这个自定义授权弹框不该再出现。 但是,当我快速切换tab,这个自定义授权弹框居然会出现,而且,授权信息为空(见下图),这是为何???

4 回复

官方迟迟没有答复,我改了一种实现方式,参考https://segmentfault.com/a/1190000015650591中的小程序片段2

这个问题我们也遇到了,用的是官方推荐的代码:

wx.getSetting({

    success:  function (res) {

        console.log(res)

             if (res.authSetting[ 'scope.userInfo' ]) {

                that.setData({

                    isauthorizationShow:  true

                })

                } else {

                that.setData({

                    isauthorizationShow:  false

                })

            }

        }

    })



自己做了一个授权的弹窗,然后判断用户是否授权过,未授权就显示,

但是问题就是明明授权了,但是过一会后(未退出小程序),在其他页面突然弹出了自己做的授权框,

退出从进就好了,

希望官方尽快给一个回复~

回到顶部