微信小程序获取用户信息(getUserProfile接口回收后)——通过头像昵称填写获取用户头像和昵称

2023-11-11

背景:最近在用uniapp写微信小程序授权登录的时候,发现项目在微信开发者工具中调试是正常的,但是在真机运行时,返回的用户数据中昵称变成了微信用户,头像变成了默认的灰底头像。接着去百度了一下发现出现这个问题的原因是getUserProfile接口被回收了,微信小程序基础库在2.27.1及以上版本的不再支持getUserProfile接口获取用户头像昵称了,改用头像昵称填写的方式去获取用户头像和昵称信息。详情可见官网

小程序用户头像昵称获取规则调整公告

头像昵称填写

 所以就把项目中的微信登录部分改成了2.27.1以下的版本还是用getUserProfile接口,2.27.1及以上的版本用头像昵称填写能力。下面是通过头像昵称填写能力获取用户头像和昵称的简单实现(uniapp)。

wx-login-popup.vue文件

<template>
	<view class="container" v-if="isVisible">
		<!-- 标题 -->
		<view class="title">
			<text>获取昵称头像</text>
			<text>未选择头像则为默认头像</text>
		</view>

		<!-- 选择头像 -->
		<view class="choose-avatar-row">
			<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
				<image class="avatar" :src="avatarUrl"></image>
			</button>
			<text>点击选择头像</text>
		</view>

		<!-- 选择昵称 -->
		<view class="choose-nickname-row">
			<text>昵称</text>
			<input v-model="nickName" @input="inputName" type="nickname" placeholder="请输入昵称" />
		</view>

		<!-- 按钮 -->
		<view class="login-row">
			<button @click="close">关闭</button>
			<button @click="submit" :class="{'inactive' : disabled}" :disabled="disabled">登录</button>
		</view>
	</view>
</template>

<script>
	export default {
		name: "wx-login-popup",
		data() {
			return {
				avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0', // 默认头像
				nickName: '',
				// 控制登录按钮是否可用
				disabled: false

			};
		},
		props: {
			isVisible: {
				type: Boolean,
				default: false
			}
		},
		watch: {
			// 只要昵称填写了就可以提交登录
			nickName(newVal) {
				if (newVal) {
					this.disabled = false
				}
			}
		},
		methods: {
			// 选择头像事件
			async onChooseAvatar(e) {
				const {
					avatarUrl
				} = e.detail
				// do something
				// 我这边是把文件上传到云服务器
				this.avatarUrl = await this.uploadFiles(avatarUrl, 'avatar')
			},
			// 上传头像图片到云服务器
			async uploadFiles(filePath, cloudPath) {
				const res = await uniCloud.uploadFile({
					cloudPath: cloudPath,
					filePath: filePath
				})
				// 上传成功后将图片路径返回出去
				return res.fileID
			},
			// 昵称输入事件
			inputName(e) {
				const {
					value
				} = e.detail
				// do something
			},
			// 关闭按钮点击事件
			close() {
				this.$emit('update:isVisible', false)
			},
			// 登录按钮点击事件
			submit() {
				const userInfo = {
					avatarUrl: this.avatarUrl,
					nickName: this.nickName
				}
				this.$emit('submit', userInfo)
			}
		}
	}
</script>

<style lang="scss">
	view {
		box-sizing: border-box;
	}

	.container {
		width: 100%;
		height: 45%;
		position: absolute;
		left: 0;
		bottom: 0;
		padding: 0 20px;
		box-sizing: border-box;
		display: flex;
		flex-direction: column;
		background-color: #fff;
		border-top-left-radius: 10px;
		border-top-right-radius: 10px;

		.title {
			width: 100%;
			height: 30%;
			font-size: 20px;
			font-weight: bold;
			padding-top: 20px;

			text:nth-child(2) {
				display: block;
				font-size: 14px;
				font-weight: normal;
				margin-top: 5px;
			}
		}

		.choose-avatar-row,
		.choose-nickname-row {
			width: 100%;
			height: 20%;
			display: flex;
			justify-content: flex-start;
			align-items: center;
			padding: 10px 2px;
			font-size: 14px;
			border-top: 1px solid #ccc;
			border-bottom: 1px solid #ccc;

			.avatar-wrapper {
				width: 40px;
				height: 40px;
				margin: 0;
				padding: 0;
				margin-right: 10px;

				.avatar {
					width: 100%;
					height: 100%;
				}
			}
		}

		.choose-nickname-row {
			border-top: none;

			text {
				width: 45px;
				margin-right: 10px;
			}
		}

		.login-row {
			width: 100%;
			height: 30%;
			padding-top: 20px;
			display: flex;

			button {
				font-size: 14px;
				width: 30%;
				height: 40px;
				display: flex;
				align-items: center;
				justify-content: center;
				border-color: transparent;
				color: #07c160;
			}

			.inactive {
				color: #ccc;
			}
		}
	}
</style>

使用:

login.vue页面(记得导入组件,我这里用的是uniapp,有easycom所以没有手动导入)

<!-- 微信登录之填写头像昵称信息 -->
<wx-login-popup :isVisible.sync="isLoginPopupVisible" @submit="submit"></wx-login-popup>

需要传递控制弹框显示与隐藏的值,接收该组件的登录事件

<script>

export default {
		data() {
			return {
				isLoginPopupVisible: false,
			}
		},
		methods: {
			// 接收填写信息组件的登录事件
			submit(userInfo) {
                // 登录逻辑...
			}
		}
	}

</script>

效果如下:

 

 

 

其中还要注意一点,获取昵称在微信开发者工具中运行时是空值,但是在真机中测试是正常能获取到微信昵称的,可能跟我没有做内容安全检测有关,如果友友们有兴趣可以去官网了解一下~

另外:弹出框样式借鉴的是这个博主的帖子

https://blog.csdn.net/qq_45737678/article/details/127898614?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166921385016782388079221%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166921385016782388079221&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-127898614-null-null.142^v66^control,201^v3^control_1,213^v2^t3_esquery_v2&utm_term=%E5%A4%B4%E5%83%8F%E6%98%B5%E7%A7%B0%E5%A1%AB%E5%86%99%E8%83%BD%E5%8A%9B&spm=1018.2226.3001.4187

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序获取用户信息(getUserProfile接口回收后)——通过头像昵称填写获取用户头像和昵称 的相关文章

  • 当系统中登录用户的角色和权限改变时的处理方法

    一 当登陆在线的用户的角色的权限改变时处理 1 登陆时将用户的所有权限放入session之中 2 在filter中加入判断信息 动态去数据库查询当前用户的权限和session中的权限的集合大小进行比较 不一致 移除session中的旧权限
  • [AHK]新浪实时股票数据接口

    2022年1月 发现 新浪接口反馈 Kinsoku jikou desu 已有新的方法 如需获取实时股票价格 当前价格 涨停价 跌停价 等 请联系weixin sunwind1576157 AHK 腾讯实时股票数据接口 AHK 腾讯实时股票
  • GO语言常用标准库 fmt

    GO语言常用标准库 fmt 1 fmt fmt包实现了类似C语言printf和scanf的格式化I O 主要分为向外输出内容和获取输入内容两大部分 1 1 1 向外输出 标准库fmt提供了以下几种输出相关函数 Print Print系列函数
  • 1024Byte(字节)=1KB

    二进制数系统中 每个0或1就是一个位 bit 位是数据存储的最小单位 计算机中的CPU位数指的是CPU一次能处理的最大位数 例如32位计算机的CPU一次最多能处理32位数据 字节 Byte 是通过网络传输信息 或在硬盘或内存中存储信息 的单
  • 【转】本地jar 上传到maven仓库

    Maven环境准备 下载maven安装包 解压后配置好path环境变量 具体配置请参考百度 注意一般maven仓库有两个目录可以上传 maven snapshots 和 maven releases 一般快照 也就是jar的后缀名为snap
  • Python:安装paddlepaddle后运行代码报错ImportError: core_avx.so: undefined symbol: _dl_sym, version GLIBC_PRIVA

    是paddlepaddle版本导致的 出现问题时我安装的版本是 python m pip install paddlepaddle 2 3 1 i https pypi tuna tsinghua edu cn simple 改成下面这个版
  • Spring(做项目常用的网址)

    目录 1 后端maven中央仓库 2 jquery官网下载 3 mybatis文档中文版 4 mybatis英文文档 5 mybatis生成逆向工程代码及网址 6 Spring网址 附注常用到的代码 7 使用 Controller注解为什么
  • 【数据库原理复习题】

    文章目录 一 单选题 二 填空题 三 判断题 四 简答题 五 综合题 5 1 属性集合的闭包计算 5 2 确定候选码并进行范式级别的判断 5 2 1 确定候选码讲解 5 2 2 范式级别的判断讲解 5 3 根据要求写SQL语句 5 3 1数
  • canvas绘制小树阴影-transform

    绘制小路 可用quadraticCurveTo 二次贝塞尔曲线 来绘制复杂曲线 也可以用bezierCurveTo 三次贝塞尔曲线 效果图 代码如下 demo html
  • 深度学习环境配置8——(30系显卡)windows下的torch==1.7.1环境配置

    深度学习环境配置8 30系显卡 windows下的torch 1 7 1环境配置 注意事项 一 2021 10 8更新 学习前言 各个版本pytorch的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anaconda的下载 2
  • 计算机毕业设计Node.js+Vue会议管理系统(程序+源码+LW+部署)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 欢迎交流 项目运行 环境配置 Node js Vscode Mysql5 7 HBuilderX Navicat11 Vue Express 项目技术 Express框架 No

随机推荐

  • java socket tcp 长连接_java socket长连接

    package com paic umap tcp import java io IOException import java io InputStream import java io ObjectInputStream import
  • LeetCode 182. Duplicate Emails

    SQL Schema Write a SQL query to find all duplicate emails in a table named Person Id Email 1 a b com 2 c d com 3 a b com
  • Ubuntu 下配置protobuf

    首先得到 protobuf 相应的包文件 在终端上输入如下 wget http protobuf googlecode com files protobuf 2 5 0 tar gz 由于 现在 protobuf 2 5 0 tar gz已
  • Python Serial串口的简单数据收发

    导入模块 注意这里模块名是pyserial pip install pyserial 1 打开串口 import serial com serial Serial COM3 9600 print com 2 发送数据 import seri
  • unityhub登录不上,登录界面刷新不出来

    如果是登录界面白屏的话可以尝试 1 关闭hub 右下角也要退出 找不到的可以直接任务管理器退出 2 删除 UserProfile AppData Roaming 里面的 UnityHub Cache和 Unity Caches 文件夹 3
  • javascript的null、undefined和布尔数据类型

    javascript中 有null undefined 在使用typeof 时候 console log typeof null object console log typeof undefined undefined null与unde
  • C++ gbk与utf8互转

    本文代码已在vs2017上验证 gbk转utf8容易出现中文乱码 有的时候在x86 32位编译环境下中文显示正常 但切换到x64 64位编译环境下会乱码 本文所示的代码在32位和64位编译环境下均不会出现乱码 使用例子见 C 调用pytho
  • 在windows下使用Vscode用CMake..命令编译源代码时候遇到的问题之解决办法

    由于我在windows下用Vscode总是不记得如何deal这个错误 因此今天就用这篇博客记录下来 在windows的Vscode这个IDE下 打开终端 输入命令行 C Users 11602 Desktop test build gt c
  • 【互联网有记忆】爬取微博热搜榜并存入数据库(python爬虫+存储过程后端实现)

    一 爬虫代码 import random time import requests re import datetime import mysql connector 定义爬取间隔 minutes interval time 15 clas
  • 随机森林(RF)

    目录 RF概念 RF算法流程 RF算法的优缺点 RF算法使用实现 RF应用 RF概念 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器 决策树的详解见链接决策树 ID3算法 C4 5算法 CART算法 xiaoming1999的博客
  • Jmeter验证码图片识别注册接口压力测试实战

    写在前面 前段时间写了一篇博文 Jmeter验证码注册接口压力测试实战 前两天又登录对应的网站看了一下 发现原来滑动验证的方式改成了图片验证码的方式 防止用户多次发送手机验证码 看到这里我本来不想再有太多想法了 但是看到如下的注册界面 将很
  • Windows Server 命令行编码乱码问题

    Windows Server 命令行编码乱码问题 输入chcp发现编码是437也就是英文编码 那么有两种解决办法 0 前提 假如服务器是中文的 那么直接跳过 英文版的要找到时间和语言设置里的区域 gt 其他日期 时间和区域设置 将格式改为中
  • kvm环境快照(snapshot)的使用方法

    实例一 使用qemu img命令使用快照 kvm环境下qcow2的镜像支持快照 1 确认镜像的格式 root nc1 boss qemu img info test qcow2 image test qcow2 file format qc
  • 3. Zipkin 持久化

    Zipkin 持久化 其实 我们仔细想想也可以总结出这种方式的几种缺陷 缺陷1 zipkin客户端向zipkin server程序发送数据使用的是http的方式通信 每次发送的时候涉及到连接和发送过程 缺陷2 当我们的zipkin serv
  • AIGC发展研究(1.0版)

    该图谱由中国信息通信研究院 中国通信标准化协会大数据技术标准推进委员会 CCSA TC601 共同发起 旨在梳理数据治理产业上下游相关企业 产品 服务的分布情况 掌握数据治理市场现状 洞察数据治理产业发展趋势 图谱1 0收录了来自98家企业
  • Qt支持https请求

    Qt支持https请求需要配置openssl环境 Qt默认是不支持SSl认证的 检测Qt支持的协议 QNetworkAccessManager manager new QNetworkAccessManager this qDebug lt
  • 毕业两年后的经历总结——一个奋斗中的前端蜂鸟

    转眼间 已经毕业两年了 不得不感叹时间过的真快啊 学生时代的美好 终于只能永久停留在记忆长河中不再复返 韶光易逝 但唯一不变的 是变化 回望过去 有过困惑 有过迷茫 也有过焦虑 刚开始工作时 也遇到了很多很多的困难 这时的我对未来比较迷茫
  • 二进制数字(2ASK)载波调制解调仿真设计(matlab仿真)

    一 实验目的 了解二进制数字信号2ASK波形特点 掌握2ASK调制解调系统的构成 基带信号 载波和2ASK已调信号之间的关系 掌握利用matlab对2ASK进行仿真的分析方法 二 实验任务 利用matlab实现对2ASK信号调制与解调的仿真
  • 微服务架构设计的12个要点

    一 负载均衡 二 API网关 三 无状态化与独立有状态集群 四 异步处理机制 五 数据集群 分库分表 六 缓存 七 服务拆分与服务发现 八 服务编排与弹性伸缩 九 统一配置中心 十 统一日志中心 十一 熔断 限流 降级 十二 全方位的监控
  • 微信小程序获取用户信息(getUserProfile接口回收后)——通过头像昵称填写获取用户头像和昵称

    背景 最近在用uniapp写微信小程序授权登录的时候 发现项目在微信开发者工具中调试是正常的 但是在真机运行时 返回的用户数据中昵称变成了微信用户 头像变成了默认的灰底头像 接着去百度了一下发现出现这个问题的原因是getUserProfil