uniapp app端一键登录

使用云函数,添加一键登录模块

 然后在相应的云函数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()

猜你喜欢

转载自blog.csdn.net/xiyan_yu/article/details/126399303