uni-app uniCloud.getPhoneNumber获取手机号报错
uni-app uniCloud.getPhoneNumber获取手机号报错
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
示例代码:
云函数内容
exports.main = async (event, context) => {
//event为客户端上传的参数
const res = await uniCloud.getPhoneNumber({
appid: 'xxxx', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
provider: 'univerify',
access_token: event.queryStringParameters.access_token,
openid: event.queryStringParameters.openid
})
// 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端
// 如果数据库在uniCloud上,可以直接入库
// 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient
//返回数据给客户端
return {
code: 0,
message: '获取手机号成功',
data: res
}
}
云函数报错日志
请求入参: {
"args": {
"path": "/",
"httpMethod": "POST",
"headers": {
"content-length": "445",
"cookie": "acw_tc=ac110000117060771325737275e05cabce5e3d8872f529952d42f95f981ef57; aliyungf_tc=2095bbff2ee5f6e2dffed5a0c11bb3047e87c238aa8d791550cc9241840af08b",
"postman-token": "50a605dd-ed27-4ece-97bf-0996112d3563",
"x5-uuid": "264aec9df7e46a6009aec04b2c1a3945",
"x-client-ip": "60.24.14.42",
"x-forwarded-for": "60.24.14.42, 118.178.15.147, 39.96.119.203",
"accept": "*/*",
"x-real-ip": "60.24.14.42",
"x-sinfo": "on",
"host": "fc-mp-eff5c0e6-6cf7-4ca5-abf7-281f6501b2d7.next.bspapp.com",
"content-type": "multipart/form-data; boundary=--------------------------432763011242833951379464",
"x-forwarded-by": "172.28.195.0:80",
"accept-encoding": "gzip, deflate, br",
"user-agent": "PostmanRuntime/7.29.2"
},
"queryStringParameters": {
"access_token": "000gtc_eb45c0a3b2a22d9078770d1fe157245f66",
"openid": "U1RzaWQwMDAwMDAxNzA2MDc3NDUwOTg1bWwyT2VwTDRXOXp6MDAwMG9UcWQ4SHQ4cjl6c05QdTh8fDF8djJ8MXxiZTBiMWZmOWY2MzNmZjcxMThkNmFkMzNhNjdiYmQy"
},
"isBase64Encoded": false,
"body": ""
},
"requestId": "ac1cc3001706077726462159343"
}
[getPhoneNumber/ac1cc3001706077726462159343/970ms/ERROR] Cannot read property 'mobile' of undefined
TypeError: Cannot read property 'mobile' of undefined
at Object.C [as univerify] (/tmp/function/@common_modules/uni-cloud-verify/index.js:1:5295)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:189:7)
2 回复
已解决,是我自己的问题access_token 和 openid传反了
在使用 uni-app
的 uniCloud.getPhoneNumber
方法获取手机号时,可能会遇到一些常见的错误。以下是一些可能的原因及解决方法:
1. 未正确配置云函数
- 确保你已经正确配置了云函数,并且在云函数中使用了
uniCloud.getPhoneNumber
方法。 - 云函数需要在
uniCloud
中创建,并且需要在uni-app
项目中正确调用。
解决方法:
- 检查云函数的代码,确保
uniCloud.getPhoneNumber
方法调用正确。 - 确保云函数已经部署到云端。
2. 未获取到用户授权
uniCloud.getPhoneNumber
方法需要用户授权才能获取手机号。如果用户没有授权,或者授权失败,可能会导致报错。
解决方法:
- 确保在调用
uniCloud.getPhoneNumber
之前,用户已经完成了手机号的授权操作。 - 检查授权流程是否正确,确保用户点击了“同意获取手机号”的按钮。
3. 云函数返回错误
- 云函数在执行过程中可能会返回错误,导致
uniCloud.getPhoneNumber
方法无法正确获取手机号。
解决方法:
- 检查云函数的日志,查看是否有错误信息。
- 确保云函数的代码逻辑正确,特别是处理手机号的逻辑。
4. 未正确传递参数
uniCloud.getPhoneNumber
方法可能需要传递一些参数,例如code
等。如果参数传递不正确,可能会导致报错。
解决方法:
- 检查调用
uniCloud.getPhoneNumber
时传递的参数是否正确。 - 确保
code
等参数是从前端获取并正确传递的。
5. 云函数权限问题
- 云函数可能需要特定的权限才能调用
uniCloud.getPhoneNumber
方法。如果权限不足,可能会导致报错。
解决方法:
- 检查云函数的权限配置,确保有足够的权限调用
uniCloud.getPhoneNumber
。 - 如果需要,可以在
uniCloud
后台配置相应的权限。
6. 网络问题
- 如果网络不稳定,可能会导致
uniCloud.getPhoneNumber
方法调用失败。
解决方法:
- 检查网络连接,确保网络稳定。
- 可以尝试重新调用
uniCloud.getPhoneNumber
方法。
7. uni-app 版本问题
- 如果你使用的
uni-app
版本较旧,可能会导致uniCloud.getPhoneNumber
方法无法正常工作。
解决方法:
- 更新
uni-app
到最新版本,确保使用的是支持uniCloud.getPhoneNumber
的版本。
8. 平台差异
- 不同平台(如微信小程序、支付宝小程序等)对
uniCloud.getPhoneNumber
的支持可能有所不同。
解决方法:
- 检查目标平台的文档,确保
uniCloud.getPhoneNumber
方法在该平台上可用。 - 根据平台的不同,可能需要调整代码逻辑。
示例代码
以下是一个简单的示例代码,展示了如何正确使用 uniCloud.getPhoneNumber
方法:
// 前端代码
uni.login({
provider: 'weixin',
success: function (loginRes) {
uniCloud.callFunction({
name: 'getPhoneNumber',
data: {
code: loginRes.code
},
success: function (res) {
console.log('获取手机号成功:', res.result);
},
fail: function (err) {
console.error('获取手机号失败:', err);
}
});
}
});
// 云函数代码
exports.main = async (event, context) => {
const { code } = event;
const res = await uniCloud.getPhoneNumber({
code: code
});
return res;
};