云函数
// 'use strict';
// exports.main = async (event, context) => {
// //event为客户端上传的参数
// console.log('event : ', event)
// //返回数据给客户端
// return event
// };
'use strict';
const crypto = require('crypto') exports.main = async (event, context) => {
console.log('event : ', event);
//event为客户端上传的参数 console.log('参数', event.queryStringParameters);
//云函数URL化的方式,获取参数
const res = await uniCloud.getPhoneNumber({
appid: '你的appId',
provider: 'univerify',
apiKey: '开通一键登录 apiKey',
apiSecret: '开通一键登录 apiSecret',
access_token: event.queryStringParameters.access_token,
openid: event.queryStringParameters.openid
})
console.log('res', res);
return res
}
// res里包含手机号
// 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端
// 如果数据库在uniCloud上,可以直接入库 // 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient ;
// 开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
// 在开发者中心开通服务并获取apiKey
// 在开发者中心开通服务并获取apiSecret
2调用
onLoad(){
// 本机一键登录
// #ifdef APP-PLUS
setTimeout(()=>{
this.yuLOgin()
},100)
// #endif
}
methods: {
async yuLOgin() {
const can_login = await this.pre_login()
if (can_login) {
this.fast_login()
}
},
/** * 一键登录预登录检查 * @return {boolean} 是否支持一键登录 */
pre_login() {
uni.getProvider({
//获取可用的服务提供商
service: 'oauth',
success: function(res) {
console.log(res.provider)
// ['weixin', qq', 'univerify']
}
});
return new Promise((resolve, reject) => {
uni.preLogin({
//预登录
provider: 'univerify',
//用手机号登录
success() {
console.log('预登录成功')
resolve(true)
},
fail(err) {
//预登录失败
console.log(`预登录失败(${err.errCode})`, err.errMsg)
resolve(false)
}
})
})
},
/** * 本机号码一键登录 */
async fast_login() {
return new Promise((resolve, reject) => {
uni.login({
//正式登录,弹出授权窗
provider: 'univerify',
univerifyStyle: {
// 自定义登录框样式
"fullScreen": false,
// 是否全屏显示,true表示全屏模式,false表示非全屏模式,默认值为false。
"backgroundColor": "#ffffff",
// 授权页面背景颜色,默认值:#ffffff
"phoneNum": {
"color": "#000000",
// 手机号文字颜色 默认值:#000000
},
"authButton": {
"normalColor": "#3479f5",
// 授权按钮正常状态背景颜色 默认值:#3479f5
"highlightColor": "#2861c5",
// 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
"disabledColor": "#73aaf5",
// 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
"textColor": "#ffffff", // 授权按钮文字颜色 默认值:#ffffff
"title": "本机号码一键登录" // 授权按钮文案 默认值:“本机号码一键登录”
}
},
success(res) {
// 正式登录成功
console.log(res);
// {openid:'登录授权唯一标识',access_token:'接口返回的 token'}
// 在得到access_token后,通过callfunction调用云函数
uniCloud.callFunction({
name: 'login', // 云函数名称
data: { //传给云函数的参数
'access_token': res.authResult.access_token,
// 客户端一键登录接口返回的access_token
'openid': res.authResult.openid
// 客户端一键登录接口返回的openid
},
success(callRes) {
console.log('调用云函数成功' + callRes)
resolve(res.authResult)
},
fail(callErr) {
console.log('调用云函数出错' + callErr)
},
complete() {
uni.closeAuthView()
// 关闭授权登录界面
}
})
uni.closeAuthView()
// 关闭授权登录界面
},
fail(err) {
// 正式登录失败
console.log(`一键登录失败(${err.errCode})`, err.errMsg)
reject(err)
// uni.closeAuthView()
//关闭授权登录界面
}
})
})
},
async phone_login() {
try {
const {
access_token,
openid
} = await this.fast_login()
console.log("uniapp一键登录", access_token, openid) // 登录操作,获取token和用户信息等操作
} catch (e) {
console.log('一键登录失败', e)
}
},
}