编程语言
首页 > 编程语言> > uniapp实现微信小程序登录功能

uniapp实现微信小程序登录功能

作者:互联网

第一步 我们先把页面画出来

<template>
	
	<!-- #ifdef MP-WEIXIN -->
	<view v-if="isCanUse">
		<view>
			<view class='headers'>
				<image src='../../static/img/logo.png'></image>
			</view>
			<view class='content'>
				<view>申请获取以下权限</view>
				<text>获得你的公开信息(昵称,头像、地区等)</text>
			</view>

			<button style="background: #E10A07;background-color: #E10A07;" class='bottom' type='primary' open-type="getUserInfo"
			 withCredentials="true" lang="zh_CN" @getuserinfo="wxGetUserInfo">
				授权登录
			</button>
		</view>
	</view>
	<!-- #endif -->
</template>

第二步再methods中写下三个方法

//第一授权获取用户信息===》按钮触发
			wxGetUserInfo() {
				let _this = this;
				
				uni.getUserInfo({
					provider: 'weixin',
					success: function(infoRes) {
						let nickName = infoRes.userInfo.nickName; //昵称
						let avatarUrl = infoRes.userInfo.avatarUrl; //头像
						try {
							uni.setStorageSync('isCanUse', false); //记录是否第一次授权  false:表示不是第一次授权
							if (_this.$queue.getData("openid")) {
                                //有openid就直接更新昵称和头像
								_this.getWeixinInfo(nickName, avatarUrl);
							} else {
                               //没有openid就直接执行登录
								_this.login()
							}

						} catch (e) {}
					},
					fail(res) {}
				});
			}, 
           //登录 这个方法用于获取用户昵称和头像同步给后台接口
			getWeixinInfo(nickName, avatarUrl) {
				uni.showLoading({
					title: '登录中...'
				});
				this.$Request.postJson("/user/mp/update", {
					invitation: this.invitation,
					unionid: this.$queue.getData("unionid"),
					imageUrl: avatarUrl,
					nickName: nickName,
					openid: this.$queue.getData("openid")
				}).then(res => {
					if (res.status === 0) {
						this.$queue.setData("token", res.data.uuid);
						this.$queue.setData("userId", res.data.userId);
						this.$queue.setData("mobile", _this.phoneData);
						this.getUserInfo(res.data.userId, res.data.uuid);
					} else {

						uni.hideLoading();
						uni.showModal({
							showCancel: false,
							title: '登录失败',
							content: res.msg,
						});
					}
				});
			},
           //使用到的登录接口
			login() {
				let _this = this;
				uni.showLoading({
					title: '登录中...'
				});
				// 1.wx获取登录用户code
				uni.login({
					provider: 'weixin',
					success: function(loginRes) {
                        //获取到code 拿着code去请求后台接口换openid和unionid 这里说到unionid只有关联了微信开放平台才会有
						let code = loginRes.code;

						_this.$Request.getT("/wx/mp/login?code=" + code).then(res => {
							if (res.status === 0) {
								_this.$queue.setData("openid", res.data.open_id)
								_this.$queue.setData("unionid", res.data.unionid)
								uni.hideLoading()
								//非第一次授权获取用户信息
								uni.getUserInfo({
									provider: 'weixin',
									success: function(infoRes) { //获取用户信息后向调用信息更新方法
										let nickName = infoRes.userInfo.nickName; //昵称
										let avatarUrl = infoRes.userInfo.avatarUrl; //头像
										if (nickName) {
											_this.getWeixinInfo(nickName, avatarUrl);
										}
									}
								});
							}
						});
					},
				});
			},

具体可以参考这个:https://ext.dcloud.net.cn/plugin?id=1798

标签:uniapp,code,登录,avatarUrl,res,queue,微信,uni,nickName
来源: https://blog.csdn.net/weixin_39706415/article/details/111588465