使用云函数,添加一键登录模块
然后在相应的云函数index中编写
'use strict';
const crypto = require('crypto') //下载crypto,引入 npm install crypto-js
exports.main = async (event, context) => {
//event为客户端上传的参数
console.log('event : ', event)
//返回数据给客户端
// return event
if(event.path=='/getphone'){
const secret = 'XXX' // 自己的密钥不要直接使用示例值,且注意不要泄露
const hmac = crypto.createHmac('sha256', secret);
let params = event.queryStringParameters
const sign = params.sign
delete params.sign
const signStr = Object.keys(params).sort().map(key => {
return `${key}=${params[key]}`
}).join('&')
hmac.update(signStr);
if(sign!==hmac.digest('hex')){
throw new Error('非法访问')
}
const {
access_token,
openid
} = params
const res = await uniCloud.getPhoneNumber({
provider: 'univerify',
appid: 'XXX', // DCloud appid,不同于callFunction方式调用,使用云函数Url化需要传递DCloud appid参数
apiKey: 'XXX', // 在开发者中心开通服务并获取apiKey
apiSecret: 'XXX', // 在开发者中心开通服务并获取apiSecret
access_token: access_token,
openid: openid
})
// 返回手机号给自己服务器
return res
}
};
安装crypto的时候记得提前把自己安装的插件先复制一下,不知道是我当时搞错的原因还是啥,把我的插件删了好些
复制package.json文件就行,到时候可以直接npm i 安装所有依赖
login(){
let that = this
if(!this.selected){
uni.showToast({
icon:"none",
title:'请先同意协议和隐私政策'
})
return false
}
uni.login({
provider: 'univerify',
univerifyStyle: {
fullScreen: true
},
success(res){
console.log(res)
let data = {
access_token:res.authResult.access_token,
openid:res.authResult.openid
}
let sys = plus.push.getClientInfo();
data.cid = sys.clientid;
let params = {
data: data,
that: that,
type:2
};
that.$store.dispatch('login', params); //这是在store中写的登录函数,就是调用接口,参数是uni.login获得的access_token和openid,然后进行相应操作
}
})
}
登录接口请求成功后,关闭权限请求页面
uni.closeAuthView()