最近新搭建了个小程序项目,登录时报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保存文章来源:https://www.toymoban.com/news/detail-527575.html
mounted(){
wx.login({
success:(res) => {
this.code = res.code
}
})
},
点击授权按钮后还是使用了async/await去获取用户信息,兼容了getUserProfile和getUserInfo文章来源地址https://www.toymoban.com/news/detail-527575.html
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.getUserProfile
if(wx.getUserProfile){
return new Promise((resolve, reject) => {
wx.getUserProfile({
lang: "zh_CN",
desc: '用于完善会员资料',
success: (res) => {
resolve(res)
}
// 失败回调根据自己项目去设计
})
})
}
// wx.getUserInfo
else{
return new Promise((resolve, reject) => {
wx.getUserInfo({
provider: 'weixin',
lang: "zh_CN",
success: (res) => {
resolve(res)
}
// 失败回调根据自己项目去设计
})
})
}
}
到了这里,关于【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!