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": {}
}
}