微信小程序登录获取不到头像和昵称解决办法!

微信小程序登录获取不到头像和昵称主要原因是:小程序wx.getUserProfile接口被收回!

大家可以按照文档操作↓

PS:

针对小程序wx.getUserProfile接口将被收回后做出的授权调整

小程序文档中提出的调整说明

attachmentId-21993

attachmentId-21994

对于此次变化,现将小程序授权方式做以调整

  1. 添加判断当前基础库是否支持头像昵称填写能力

在根目录App.vue中加入判断基础库是否大于2.21.2版本(大于此版本支持头像/昵称填写能力)

// #ifdef MP
	const version = uni.getSystemInfoSync().SDKVersion
	if (Routine.compareVersion(version, '2.21.2') >= 0) {
		that.$Cache.set('MP_VERSION_ISNEW', true)
	} else {
		that.$Cache.set('MP_VERSION_ISNEW', false)
	}
// #endif

Copy

2.修改/pages/users/wechat_login.vue文件

(1) 在data中加入基础库判断,决定授权逻辑

mp_is_new: this.$Cache.get('MP_VERSION_ISNEW') || false

Copy

(2)dom中新增逻辑判断

4704f202211101621275814.png

(3) methods中加入方法userLogin

// 小程序 22.11.8日删除getUserProfile 接口获取用户昵称头像
	userLogin() {
		Routine.getCode()
			.then(code => {
				uni.showLoading({
					title: '正在登录中'
				});
			    authLogin({
					code,
					spread_spid: app.globalData.spid,
					spread_code: app.globalData.code
				}).then(res => {
					if (res.data.key !== undefined && res.data.key) {
						uni.hideLoading();
						this.authKey = res.data.key;
						this.isPhoneBox = true;
					} else {
						uni.hideLoading();
						let time = res.data.expires_time - this.$Cache.time();
						this.$store.commit('LOGIN', {
							token: res.data.token,
							time: time
						});
						this.getUserInfo()
					}
	
				})
			})
			.catch(err => {
				console.log(err)
			});
	},

Copy

/api/public.js 文件添加接口

/**
 * code生成用户
 * @returns {*}
 */
export function authLogin(data) {
	return request.get("v2/wechat/silence_auth_login", data, {
		noAuth: true
	});
}

Copy

3.新增用户头像/昵称获取能力

(1)调整pages/users/user_info.vue文件

   data中添加

mp_is_new: this.$Cache.get('MP_VERSION_ISNEW') || false

Copy

(2)调整dom中

7fe26202211101620461344.png

(3)methods中加入方法

onChooseAvatar(e) {
	const { avatarUrl } = e.detail
	this.$util.uploadImgs('upload/image', avatarUrl, (res) => {
		this.userInfo.avatar = res.data.url
	}, (err) => {
		console.log(err)
	})
},

Copy

这里有一个公共方法uploadImgs需要在/utils/util.js中添加

uploadImgs(uploadUrl, filePath, successCallback, errorCallback) {
	let that = this;
	uni.uploadFile({
		url: HTTP_REQUEST_URL + '/api/' + uploadUrl,
		filePath: filePath,
		fileType: 'image',
		name: 'pics',
		formData: {
			'filename': 'pics'
		},
		header: {
			// #ifdef MP
			"Content-Type": "multipart/form-data",
			// #endif
			[TOKENNAME]: 'Bearer ' + store.state.app.token
		},
		success: (res) => {
			uni.hideLoading();
			if (res.statusCode == 403) {
				that.Tips({
					title: res.data
				});
			} else if (res.statusCode == 413) {
				that.Tips({
					title: '上传图片失败,请重新上传小尺寸图片'
				});
			} else {
				let data = res.data ? JSON.parse(res.data) : {};
				if (data.status == 200) {
					successCallback && successCallback(data)
					} else {
					errorCallback && errorCallback(data);
					that.Tips({
						title: data.msg
					});
				}
			}
		},
		fail: (err) => {
			uni.hideLoading();
				that.Tips({
				title: '上传图片失败'
			});
		}
	})
},
微信小程序中使用 TDesign 模板时,如果头像昵称获取后不显示,可能是以下几个原因造成的: 1. **数据绑定问题**:确认你在设置用户信息的地方是否正确地将头像昵称从数据源绑定到组件上了。例如,在 `wx:if` 或者 `wx:else` 结构里,确保数据已经正确赋值。 ```html <template> <t-avatar :src="user.avatar" :size="24"></t-avatar> <t-tag>{{ user.nickName }}</t-tag> </template> <script> export default { data() { return { user: { avatar: '', nickName: '' } }; }, onLoad() { // 这里假设你在onLoad生命周期函数中获取了用户信息 this.user = getUserInfo(); // 调用实际获取数据的函数 }, }; </script> ``` 2. **权限问题**:检查用户授权策略,确保微信小程序有权限访问用户的个人信息,可以在`permission`模块中检查。 ```javascript onLoad() { wx.getSetting({ success(res) => { if (!res.authSetting['scope.userInfo']) { wx.authorize({ scope: 'scope.userInfo', success() { getUserInfo(); }, }); } else { getUserInfo(); } }, }); } ``` 3. **渲染延迟**:如果数据是在异步操作之后才获取的,可能需要等待数据加载完成后再更新视图。可以使用 `async` 和 `await` 关键字处理异步操作。 4. **错误处理**:确保获取用户信息的函数返回正确且包含头像昵称字段。如果有错误,确保适当地捕获并处理这些错误。 如果你遇到了这个问题,可以尝试以上排查步骤,并查看 TDesign 的官方文档或社区论坛,看看是否有其他开发者遇到过类似的问题及其解决方案。同时,记得检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值