uni-app Error: 获取当前用户信息出错,详细错误信息为 atob is not a function

uni-app Error: 获取当前用户信息出错,详细错误信息为 atob is not a function

错误描述

Error: 获取当前用户信息出错,详细错误信息为:atob is not a function
at F.rt [as getCurrentUserInfo] (index.js?a9ff:1)
at VueComponent.getUserMenu (uni-data-menu.js:318)
at eval (uni-data-menu.js:378)
uniCloud admin的项目。代码基本还没有做什么改动,更改了首页的图片,去掉了静态的菜单。
本地H5运行没有问题,使用微信小程序运行也没有问题,但是**真机运行**的时候报上述错误。
信息类型 信息
开发环境 Mac M1
HBuilder 版本 3.2.9.20210927
Chrome 版本 94.0.4606.71(正式版本) (arm64)
微信开发工具调试基础库 2.15.0

看描述,这个错误是某个对象没有atob这个方法导致的。比较底层,我先调整一下调试基础库,之后再尝试下。
大家帮手解决下吧,我是做后端的,没见过前端这种报错的阵势啊。没见过市面,先谢过大家了啊。
UniCloud大佬帮看下吧。。。

更多关于uni-app Error: 获取当前用户信息出错,详细错误信息为 atob is not a function的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

Error: 获取当前用户信息出错,详细错误信息为:atob is not a function 使用调试基础库2.7.7会报其他的错误。所以统一把两个相关联的项目设置成了2.15.0,目前还是报同样的错误。

更多关于uni-app Error: 获取当前用户信息出错,详细错误信息为 atob is not a function的实战教程也可以访问 https://www.itying.com/category-93-b0.html


补充几张图。为什么生成的代码和实际的代码有比较大的出入。。。比较困惑啊


Bug已确认,下个版本HBuilderX发布时修复此问题

…什么情况就bug确认了。。。 我觉得像是依赖某些公共组件的代码,这代码是公用运行时下载的,而这个代码的版本可能更新,导致某些函数没有定义,是这样不。。? 能不能多说两句,啥原因的。。。

回复 x***@126.com: uniCloud.getCurrentUserInfo 内使用了atob这个全局方法,但是微信小程序把这个方法去掉了

回复 DCloud_uniCloud_WYQ: thank u

这是一个典型的运行环境兼容性问题。atob 是浏览器环境下的全局函数,用于解码 Base64 字符串。在微信小程序等非浏览器环境中,这个函数不存在。

问题根源: uniCloud admin 框架内部或你引入的某个依赖,在获取用户信息时(可能涉及解析 token),尝试调用了 atob 函数。在 H5 浏览器环境下运行正常,但在 App 或小程序等真机环境(非标准浏览器环境)下,window.atob 不存在,因此报错 atob is not a function

解决方案:

你需要提供一个跨平台的 Base64 解码方法。最直接的方式是使用 uni-app 自带的 uni.base64ToArrayBuffer,但它的返回值类型可能不匹配。更通用的方案是手动实现或引入 polyfill。

在你的项目入口文件(如 main.js)或公共工具文件中,添加以下代码:

// 全局兼容 atob 函数
if (typeof atob === 'undefined') {
  global.atob = function(encoded) {
    // 简单的 Base64 解码实现,或使用更健壮的库
    return Buffer.from(encoded, 'base64').toString('binary');
    // 注意:在某些环境下可能需要先引入 Buffer polyfill
  };
}
回到顶部