草庐IT

uniApp微信小程序唤出授权头像昵称(微信授权登录)弹窗,及服务端用户信息解密注意事项

LinMin_Rik 2023-12-22 原文

头像昵称弹窗弹出条件:button授权按钮 + uni.getUserProfile API请求

简单唤醒示范案例:

1.H5部分

<text class="loginsubmitbox-text"  v-on:tap="wechatLogin">微信一键登录</text>

2.JS部分

wechatLogin(){
	// 获取用户信息
	uni.getUserProfile({
		desc: '获取你的昵称、头像、地区及性别',
		success: res => {
			console.log(res);
			console.log(1);
		},
		fail: res => {
			console.log(2);
			console.log(res)
			//拒绝授权
			uni.showToast({
				title: '您拒绝了请求,不能正常使用小程序',
				icon: 'error',
				duration: 2000
			});
			return;
		}
	});
}

注意事项:

不能嵌入其他API内调用,一定要在调用的方法中第一层执行(优先执行uni.getUserProfile

正确做法:必须第一步用户点击按钮,第二步调取uni.getUserProfile API(调取uni.getUserProfile操作与用户操作紧密联系)

错误做法:第一步用户点击按钮,第二步调uni.checkSession ,第三步才调取uni.getUserProfile API(中间隔着其他操作会导致调取uni.getUserProfile API授权弹窗失败)

实战应用中的授权登录示范案例:

1.错误写法:(两点错误:1.uni.checkSession中嵌入uni.getUserProfile会导致头像授权弹窗拉不起来;2.uni.login应该在uni.getUserProfile之前执行,否则会导致秘钥和密文不匹配从而解密失败)

wechatLogin() {
	//检查登录态是否过期
	uni.checkSession({
		provider: 'weixin',
		success: function(loginRes) {
			console.log('checkSession成功', loginRes);
		},
		fail: function(loginRes) {
			console.log('checkSession失败', loginRes);
			// 获取用户信息
			uni.getUserProfile({
				desc: '获取你的昵称、头像、地区及性别',
				success: res => {
					console.log('获取你的昵称、头像', res);
					//重新登录
					uni.login({
						provider: 'weixin',
						success: function(loginRes) {
							console.log('login重新登录', loginRes);
							// 登录请求
							// api.apiPost("/api/member/wechatappauth", {
							// 	jscode: loginRes.code,
							// }, (res) => {
							// 	console.log(res)
							// 	if (res.code == 0) {
							// 	} else {
							// 		uni.showModal({
							// 			title: '提示',
							// 			content: res.msg,
							// 		});
							// 	}
							// })
						},
						fail: function(loginRes) {
							console.log(loginRes)
						}
					});
				},
				fail: res => {
					console.log(2);
					console.log(res)
					//拒绝授权
					uni.showToast({
						title: '您拒绝了请求,不能正常使用小程序',
						icon: 'error',
						duration: 2000
					});
					return;
				}
			});
		},
	});
}

2.正确写法:(uni.getUserProfile在最外层直接调用,这样就成功唤醒授权弹窗;且uni.login要比uni.getUserProfile先执行)

wechatLogin() {
	//检查登录态是否过期
	uni.checkSession({
		provider: 'weixin',
		success: function(loginRes) {
			console.log('checkSession成功',loginRes);
		},
		fail: function(loginRes) {
			console.log('checkSession失败',loginRes);
		},
	});
	
	//重新登录
	let jsCode = ''
	uni.login({
		provider: 'weixin',
		success: function(loginRes) {
			jsCode = loginRes.code;
			console.log('login重新登录',{
				jscode: loginRes.code,
				jscodeinfo:res
			});
		},
		fail: function(loginRes) {
			console.log(loginRes)
		}
	});
	
	// 获取用户信息
	uni.getUserProfile({
		desc: '获取你的昵称、头像、地区及性别',
		success: res => {
			console.log('获取你的昵称、头像',res);
			// 登录请求
			// api.apiPost("/api/member/wechatappauth", {
			// 	jscode: jsCode,
			// 	jscodeinfo:res
			// }, (res1) => {
			// 	console.log(res1)
			// 	if (res1.code == 0) {
			// 	} else {
			// 		uni.showModal({
			// 			title: '登录失败',
			// 			content: '请刷新小程序后重新操作',
			// 		});
			// 	}
			// })
		},
		fail: res => {
			console.log(2);
			console.log(res)
			//拒绝授权
			uni.showToast({
				title: '您拒绝了请求,不能正常使用小程序',
				icon: 'error',
				duration: 2000
			});
			return;
		}
	});
}

注意事项:

服务端用户信息解密失败原因:小程序客户端调用微信服务器的接口顺序反了。

 顺序应该是  1、wx.login    2、wx.getUserInfo 。 
如果顺序反过来 ,会出现校验解密失败的问题,比较坑的是 不是每次都出错。

小程序客户端需要调用微信服务器的wx.login接口来获取code,然后调用wx.getUserInfo来获取加密数据和偏移向量iv。正确的顺序应该是先调用login,然后再调用getUserInfo。

有关uniApp微信小程序唤出授权头像昵称(微信授权登录)弹窗,及服务端用户信息解密注意事项的更多相关文章

  1. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  2. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  3. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  4. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  5. ruby - Ruby 中的单 block AES 解密 - 2

    我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec

  6. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  7. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  10. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

随机推荐