WalteE
WalteE
  • 发布:2022-11-09 16:01
  • 更新:2022-11-09 16:23
  • 阅读:41

【报Bug】一键登录调用云函数报错SYS_ERR

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 13.0 (22A380)

HBuilderX类型: 正式

HBuilderX版本号: 3.6.4

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iphone 12

页面类型: nvue

vue版本: vue3

nvue编译模式: 纯nvue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

app端调用

const univerifyManager = uni.getUniverifyManager()  
                univerifyManager.preLogin()  
                univerifyManager.login({  
                    univerifyStyle: {  
                        "fullScreen": false,  
                    },  
                    success(res) {  
                        console.log('login success', res)  
                        uniCloud.callFunction({  
                            name: 'getPhoneNumber', // 你的云函数名称  
                            data: {  
                                access_token: res.authResult.access_token, // 客户端一键登录接口返回的access_token  
                                openid: res.authResult.openid // 客户端一键登录接口返回的openid  
                            }  
                        }).then(res => {  
                            console.log(res, 'phone')  
                            uni.showToast({  
                                title: '成功' + JSON.stringify(res),  
                                icon: 'none'  
                            })  
                            uni.closeAuthView()  
                            // 登录成功,可以关闭一键登录授权界面了  
                        }).catch(err => {  
                            uni.closeAuthView()  
                            uni.showToast({  
                                title: JSON.stringify(err) || '错误',  
                                icon: 'none'  
                            })  
                            console.log(err, 'error')  
                            // 处理错误  
                        })  
                    },  
                    fail(res) { // 登录失败  
                        uni.closeAuthView()  
                        console.log(res.errCode, 'errCode')  
                        console.log(res.errMsg, 'errMsg')  
                    }  
                })

云函数
index.js

'use strict';  
exports.main = async (event, context) => {  
    // event里包含着客户端提交的参数  
    try {  
        const res = await uniCloud.getPhoneNumber({  
            appid: '__UNI__5058F31', // 替换成自己开通一键登录的应用的DCloud appid  
            provider: 'univerify',  
            apiKey: 'xxx', // 在开发者中心开通服务并获取apiKey  
            apiSecret: 'xxx', // 在开发者中心开通服务并获取apiSecret  
            access_token: event.access_token,  
            openid: event.openid  
        })  

        console.log(res); // res里包含手机号  
        // 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端  
        // 如果数据库在uniCloud上,可以直接入库  
        // 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient  
        return {  
            code: 0,  
            message: '获取手机号成功',  
            data: res  
        }  
    } catch(err){  
        return {  
            code: -1,  
            message: 'uniCloud.getPhoneNumber错误',  
            err  
        }  
    }  

}  

package.json

{  
  "name": "getPhoneNumber",  
  "dependencies": {},  
  "extensions": {  
    "uni-cloud-verify": {}  
  }  
}

操作步骤:

和代码示例一致即可重现。

预期结果:

预期结果应该能获取到手机号。

实际结果:

无法获取在app端就抛出了错误。没有调用到云端函数。

zip和安装包无法上传。安装包蒲公英连接。
安卓包:
https://www.pgyer.com/99da3511068d962548cbb0a90e80b7ee
ios包:
https://www.pgyer.com/2dfc61a27f6fbfe47ea18b9fdb48557c

bug描述:

app端调用uni.login,参数provider为univerify。能成功获取到access_token和openid。
在调用uniCloud.callFunction代码进入了catch。报错如下:

B: [getPhoneNumber]: request:ok    
    at Function.complete (http://172.20.10.8:8091/source/file:///var/mobile/Containers/Data/Application/B846AD79-B989-4A33-BE12-039B918D24AD/Documents/Pandora/apps/__UNI__5058F31/www/pages/login/index.js:1079:21)    
    at     
    at Object.So._e [as callback] ()    
    at $o ()    
    at Ji ()    
    at resolve ()    
    at ln ()    
    at of.consume ()    
    at Lc.callback ()    
    at eN ()

一、云端函数以及上传并且部署。点击上传并运行可以调用成功。
二、一键登录添加了应用并且审核通过。
三、调试时HBuilderX选择的是云端云函数。通过云打包后把安装包安装到手机也是一样的错误。
四、云函数管理后台没有产生日志。只有手动上传并运行的日志。

图1是本地连接手机通过自定义底座调试。图二为云打包后的app安装到手机alert的报错,也是进入到了uniCloud.callFunction的catch

2022-11-09 16:01 负责人:无 分享
已邀请:

要回复问题请先登录注册