当前位置: 代码迷 >> 综合 >> 【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.
  详细解决方案

【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.

热度:86   发布时间:2023-11-15 17:03:57.0

最近新搭建了个小程序项目,登录时报getUserProfile:fail can only be invoked by user TAP gesture.这个错误。查了网上说的是使用了async和await,试着改了不用async和await,结果还是一样报这个错误。

我的代码是用户点击授权按钮后,先使用wx.login,接着后面使用wx.getUserProfile,在同一个方法里执行。试着将wx.login注释,结果wx.getUserProfile正常获取到结果。也就是说wx.login和wx.getUserProfile不能在同一时间去获取。

知道原因之后就好办了,将wx.login移到了授权组件的mounted方法,并将code保存

mounted(){wx.login({success:(res) => {this.code = res.code}})
},

点击授权按钮后还是使用了async/await去获取用户信息,兼容了getUserProfile和getUserInfo

actionLogin: async function(res) {// 原本在这里调用getWxCode的wx.login获取code的// const resCode = await this.getWxCode()const resUser = await this.getUserInfo()this.getOpenid(resUser)    // 拿到了code和个人信息就可以调后端接口登录了
},// 适配新旧版本获取个人信息
getUserInfo: async function() {// wx.getUserProfileif(wx.getUserProfile){return new Promise((resolve, reject) => {wx.getUserProfile({lang: "zh_CN",desc: '用于完善会员资料',success: (res) => {resolve(res)}// 失败回调根据自己项目去设计})})}// wx.getUserInfoelse{return new Promise((resolve, reject) => {wx.getUserInfo({provider: 'weixin',lang: "zh_CN",success: (res) => {resolve(res)}// 失败回调根据自己项目去设计})})}
}

  相关解决方案