uniapp app端一键登录

该博客介绍了如何在云函数中集成一键登录模块,通过校验签名防止非法访问,并利用 uniCloud 的 getPhoneNumber 接口获取用户手机号。在用户登录后,关闭权限请求页面。代码示例详细展示了整个流程,包括登录接口的调用和参数处理。
摘要由CSDN通过智能技术生成

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值