uniapp在小程序中登录,获取用户信息,获取手机号

该博客详细介绍了在uniapp中实现微信小程序的登录流程,包括使用uni.login获取code,通过code换取openid和session_key,解密获取手机号,最后调用后端接口完成登录并展示用户信息。涉及的技术包括微信登录授权、加密解密和前后端交互。
摘要由CSDN通过智能技术生成
<template>
	<view class="content"
		<view class="conLogin">
			<!-- button里@getphonenumber获取手机号 -->
			<button class="login" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">登录</button>
			<view class="login" @click="get_user()">获取用户信息</view>
		</view>
	</view>
</template>

<script>
	import WXBizDataCrypt from "@/common/Node/WXBizDataCrypt.js" // 需要引入
	export default {
		data() {
			return {
				code: '',
				encryptData: '',
				iv: '',
				openid: '',
				phone: '',
			}
		},
		onLoad() {
			// 建议一进页面就调用uni.login,否则可能会报错
			uni.login({
				provider: 'weixin',
				success: (loginRes) => {
					console.log('登录', loginRes);
					this.code = loginRes.code // 获得的code
				}
			})
		},
		methods: {
			getPhoneNumber(e) {
				console.log(e, '获取手机号');
				this.phone_code = res.detail.code // 获得的手机code
				this.phone_encryptedData = res.detail.encryptedData //用于解密
				this.phone_iv = res.detail.iv // 用于解密
				// 下载引入的文件链接地址  (开放数据校验与解密=>(下滑到)加密数据解密算法=>点击下载)
				// https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

				// 解密需要的内容
				// appID:小程序的appid
				// session_key:第二步返回的会话密钥
				// encryptedData:第三步返回的内容
				// iv:第三步返回的内容
				let pc = new WXBizDataCrypt('这里是appid', this.session_key);
				let data = pc.decryptData(this.phone_encryptedData, this.phone_iv);
				console.log(data) //data就是最终解密的用户信息  
				this.phone = data.phoneNumber // 手机号
				
				// 获取openid
				let that = this
				uni.request({
					url: 'https://api.weixin.qq.com/sns/jscode2session', // 请求微信服务器
					method: 'GET',
					data: {
						appid: '这里是你的小程序aphid', //你的小程序的APPID
						secret: '这里是你小程序生成的密钥', //你的小程序秘钥secret,  
						js_code: this.code, //wx.login 登录成功后的code
						grant_type: 'authorization_code'
					},
					header: {
						"Content-Type": "application/x-www-form-urlencoded",
					},
					success: res => {
						console.log('登录', res); //获取到用户的手机号和openid 然后调登录接口把手机号和openid传过去就可以了
						if (res.data.code === 200) {
							console.log('获取openid', res); // 换取成功后 暂存这些数据 留作后续操作
							this.openid = res.data.openid //openid 用户唯一标识
							this.session_key = res.data.session_key //session_key  会话密钥
							uni.request({
								url: that.BaseUrl + "后端登录接口",
								method: "POST",
								data: {
									phone: this.phone,
									openId: this.openid
								},
								header: {
									"Content-Type": "application/x-www-form-urlencoded",
								},
								success: res => {
									console.log('登录页面', res);
									if (res.data.code === 200) {
										uni.setStorageSync('userId', res.data.data.id)
										uni.showLoading({
											title: '登录中...'
										})
										setTimeout(function() {
											uni.hideLoading();
											uni.showToast({
												title: '登录成功',
												icon: 'none'
											})
											uni.switchTab({
												url: '/pages/index/index'
											})
										}, 1000)
									} else {
										uni.showToast({
											title: res.data.msg,
											icon: 'none'
										})
									}
								},

							});
						}

					},

				});

			},
			get_user() { // 获取用户信息
				uni.getUserProfile({
					desc: '用户登录',
					success: res => {
						console.log(res) // 用户的信息
						this.user_img = res.userInfo.avatarUrl //微信头像
						this.user_name = res.userInfo.nickName // 微信昵称
					}
				})
			},

		}
	}
</script>

<style lang="scss">
	.content {
		width: 100vw;
		height: 100vh;
		background-color: #f1f1f1;
		position: relative;
	}



	.conLogin {
		position: absolute;
		bottom: 114rpx;
		left: 119rpx;



		.login {
			width: 512rpx;
			height: 95rpx;
			line-height: 95rpx;
			border-radius: 47.5rpx;
			background: #002bd4;
			opacity: 0.89;
			font-size: 40rpx;
			text-align: center;
			color: #fff;
		}
	}
</style>

uniapp开发微信小程序的过程中,需要在微信端登录,获取用户的信息(头像,昵称内容,手机号),为了方便用户,直接通过微信授权的方式进行登录获取

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值