uni-app 使用打的自定义调试基座(带原生插件)或云打包时,授权返回会多出一个页面,点返回后才能回到登录页面,此时无法获取授权回调

uni-app 使用打的自定义调试基座(带原生插件)或云打包时,授权返回会多出一个页面,点返回后才能回到登录页面,此时无法获取授权回调

开发环境 版本号 项目创建方式
Mac Mac OS 12.3 HBuilderX

示例代码:

uni.login({
provider: 'weixin',
onlyAuthorize: true, // 微信登录仅请求授权认证
success: function (event) {
const { code } = event;
console.log('code:', code);
vm.weixinAppLogin(code, 'wechat');
},
fail: function (err) {
// 登录授权失败
// err.code是错误码
console.log('err:', err);
},
})

操作步骤:

  • 调用微信app授权登录

预期结果:

  • 可以正常拿到回调

实际结果:

  • 没有正常的返回回调

bug描述:

HBuilder X升级到最新版之后(4.08),使用标准基座,微信app可以正常授权获取到code,使用打的自定义调试基座时(带原生插件)或者云打包,授权返回会多出一个页面,,点返回之后才能回到登录页面,这个时候不能获取到授权的回调。在3.99版本开发的时候是可以正常授权登录的。


更多关于uni-app 使用打的自定义调试基座(带原生插件)或云打包时,授权返回会多出一个页面,点返回后才能回到登录页面,此时无法获取授权回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

私信一下我qq,需要再提供一些信息

更多关于uni-app 使用打的自定义调试基座(带原生插件)或云打包时,授权返回会多出一个页面,点返回后才能回到登录页面,此时无法获取授权回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,已经私信你QQ了,麻烦加一下

在使用 uni-app 开发应用时,如果遇到在使用自定义调试基座(带原生插件)或云打包时,授权返回多出一个页面,并且点击返回后才能回到登录页面,导致无法获取授权回调的情况,可以尝试以下解决方案:

1. 检查授权回调 URL

确保你的授权回调 URL 配置正确,并且在授权成功后能够正确地返回到指定的页面。通常,授权回调 URL 应该在授权成功后直接跳转到指定的页面,而不是多出一个中间页面。

2. 检查页面跳转逻辑

在授权成功后,检查页面跳转逻辑,确保没有多余的页面跳转或重定向。可以使用 uni.navigateTouni.redirectTo 来直接跳转到目标页面,而不是使用 uni.switchTab 或其他可能导致页面堆栈增加的 API。

3. 使用 uni.reLaunch 重置页面栈

如果你希望在授权成功后直接返回到登录页面,并且不希望保留之前的页面栈,可以使用 uni.reLaunch 来重置页面栈并跳转到登录页面。

uni.reLaunch({
  url: '/pages/login/login'
});

4. 检查原生插件逻辑

如果你使用了原生插件,确保插件在授权成功后的回调逻辑中正确处理了页面跳转。原生插件不应该在授权成功后插入多余的页面。

5. 调试自定义基座

在自定义调试基座中,确保没有额外的逻辑或代码导致页面跳转异常。可以通过逐步调试的方式,检查每一步的页面跳转逻辑,找出问题所在。

6. 检查云打包配置

在云打包时,确保打包配置没有引入额外的逻辑或代码。可以尝试使用不同的打包配置,或者使用官方提供的标准打包配置进行测试。

7. 使用 uni.$onuni.$emit 传递回调数据

如果授权回调数据在页面跳转过程中丢失,可以使用 uni.$onuni.$emit 来传递回调数据,确保在目标页面中能够获取到授权回调数据。

// 在授权成功页面
uni.$emit('authCallback', { data: authData });

// 在登录页面
uni.$on('authCallback', function(data) {
  console.log('授权回调数据:', data);
});

8. 检查 manifest.json 配置

确保 manifest.json 中的页面路由配置正确,没有多余的页面路由或重定向逻辑。

9. 使用 uni.getStorageSyncuni.setStorageSync 存储回调数据

如果页面跳转导致回调数据丢失,可以使用 uni.setStorageSync 在授权成功后存储回调数据,然后在登录页面中使用 uni.getStorageSync 获取回调数据。

// 在授权成功页面
uni.setStorageSync('authCallbackData', authData);

// 在登录页面
const authData = uni.getStorageSync('authCallbackData');
回到顶部