uniapp 本机一键登录

云函数

// '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)
				}
			},
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值