uni-app Html5+微信登录时弹窗出现会授权两次bug

uni-app Html5+微信登录时弹窗出现会授权两次bug

开发环境 版本号 项目创建方式
HBuilderX 3.1.14

示例代码:

var aweixin=null;  
var _this=this  
plus.oauth.getServices(function(services){  
   services.forEach((item)=>{  
        if(item.id=='weixin'){  
            aweixin = item;  
            console.log(aweixin)  
        }  
    })  
    if(!aweixin){//没有取得微信登陆的服务  
        uni.showToast({  
                title:'当前环境不支持微信登录',  
                icon:'none'  
        })  
        return;  
   }  
   if(!aweixin.authResult){//是否登录认证过  
     aweixin.authorize((e)=>{//在这块,只要授权弹窗出现,需要用户同意两次,才可以继续进行下面的流程  
       aweixin.login((e)=>{  
         //自定义的业务逻辑  
       })  
    })  

   }  
})  

操作步骤:

var aweixin=null;  
var _this=this  
plus.oauth.getServices(function(services){  
   services.forEach((item)=>{  
        if(item.id=='weixin'){  
            aweixin = item;  
            console.log(aweixin)  
        }  
    })  
    if(!aweixin){//没有取得微信登陆的服务  
        uni.showToast({  
                title:'当前环境不支持微信登录',  
                icon:'none'  
        })  
        return;  
   }  
   if(!aweixin.authResult){//是否登录认证过  
     aweixin.authorize((e)=>{//在这块,只要授权弹窗出现,需要用户同意两次,才可以继续进行下面的流程  
       aweixin.login((e)=>{  
         //自定义的业务逻辑  
       })  
    })  

   }  
})  

更多关于uni-app Html5+微信登录时弹窗出现会授权两次bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app Html5+微信登录时弹窗出现会授权两次bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的授权流程重复调用问题。在H5+环境下,微信登录的authorize方法会触发两次授权弹窗,这是因为H5+的授权机制与微信SDK的授权流程存在重叠。

问题的核心在于:authorize方法本身已经包含了完整的授权流程,无需再调用login方法。正确的做法是:

aweixin.authorize((e)=>{
    if(e.authResult){
        // 这里直接获取用户信息或执行后续业务逻辑
        // 不需要再调用aweixin.login()
        console.log('授权成功', e);
        // 执行你的业务代码
    }else{
        console.log('授权失败');
    }
});

或者,如果你只需要获取登录凭证,可以直接使用login方法:

aweixin.login((e)=>{
    if(e.code){
        // 获取到code,可以发送到后端换取openid和session_key
        console.log('登录成功', e.code);
        // 执行你的业务代码
    }
});
回到顶部