uni-app -- 授权获取个人信息-登录注册流程

每一个你不满意的现在,都有一个你没有努力的曾经

在写小程序时,有时不授权获取信息也能获取到,但有时就会出现报错问题。
那么,怎么一个流程才是正确的登录流程呢?

文章以快手小程序 授权获取个人信息为例

1. 梳理思路

要注册登录,首先就要获取到个人信息。
要获取到个人信息,就要用户先授权
如果首次授权拒绝了,如何再次引导授权

2. 步骤拆分

如果着急的同学,可以直接看2.3 引导用户再次授权部分

2.1 获取用户当前获取权限的状态

getSet() {
	uni.getSetting({
		success(getRes) => {
			console.log('获取到的权限的状态', getRes)
		}
	})
}

打印的日志如图:
在这里插入图片描述

可以看到,默认都是undefined,即用户没有授权的情况。

2.2 获取个人信息,让用户进行授权

methods: {
	// 获取授权状态
	getSet() {
		let _this = this;
		uni.getSetting({
			success(getRes) {
				console.log('获取到的权限的状态', getRes)
				// 如果值为true,即代表已经授权
				if (getRes.authSetting['scope.userInfo']) {
					// 已经授权,直接注册登录
				} else {
					// 尚未授权,前往授权
					_this.auth()
				}
			}
		})
	},
	// 进行授权
	auth() {
		console.log('需要授权')
		uni.authorize({
			scope: 'scope.userInfo',
			success(authRes) {
				console.log('成功授权', authRes)
				uni.getUserInfo({
					desc: '我要获取你的信息!',
					success: function(userRes) {
						console.log('获取个人信息成功', userRes)
					},
					fail(err) {
						console.log('获取个人信息失败', err)
					}
				})
			},
			fail(err) {
				console.log('拒绝授权', err)
			}
		})
	},
}

首次授权操作,如果用户选择拒绝授权,将打印日志如下:
在这里插入图片描述

2.3 引导用户再次授权

methods: {
	// 获取授权状态
	getSet() {
		let _this = this;
		uni.getSetting({
			success(getRes) {
				console.log('获取到的权限的状态', getRes)
				console.log('获取权限状态', getRes.authSetting['scope.userInfo'])
				// 如果值为true,即代表已经授权
				if (getRes.authSetting['scope.userInfo']) {
					// 已经授权,直接获取个人信息
					_this.getProfile()
				} else if (getRes.authSetting['scope.userInfo'] == undefined) {
					// 值为undefined 代表是首次进行授权操作
					// 尚未授权,前往授权
					_this.auth()
				} else {
					// 值为false 代表是首次授权拒绝后再次打开的操作
					// 引导再次授权
					uni.showModal({
						title: '授权',
						content: '需要授权获取个人信息,是否前往授权设置?',
						success: function(showRes) {
							// 如果确认去授权
							if (showRes.confirm) {
								return uni.openSetting({
									success(openRes) {
										openRes.authSetting['scope.userInfo'] = true;
										_this.getSet();
									}
								})
							}
						}
					})
				}
			}
		})
	},
	// 进行授权
	auth() {
		let _this = this;
		console.log('需要授权')
		uni.authorize({
			scope: 'scope.userInfo',
			success(authRes) {
				console.log('成功授权', authRes)
				_this.getProfile()
			},
			fail(err) {
				console.log('拒绝授权', err)
			}
		})
	},
	//获取个人信息
	getProfile() {
		uni.getUserInfo({
			desc: '我要获取你的信息!',
			success: function(userRes) {
				console.log('获取个人信息成功', userRes)
				//  前往注册、登录即可
			},
			fail(err) {
				console.log('获取个人信息失败', err)
			}
		})
	}
}

再次调用getSet()
打印出的日志如图:
在这里插入图片描述

此时会看到引导再次授权的弹窗
在这里插入图片描述

点击确定,就会跳转至授权页面
在这里插入图片描述
授权成功回来,会再次打开获取个人信息的弹窗

在这里插入图片描述
此时可以看到授权状态为
在这里插入图片描述

注意:此时逻辑走的是第一种情况,即:
在这里插入图片描述

此时就可获取到个人信息
在这里插入图片描述

再之后,就可执行后续登录注册的逻辑了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值