微信小程序 实现登录流程

本文详细介绍了微信小程序的登录流程,包括使用wx.login获取code,通过code换取OpenID和UnionID,以及如何获取和存储token以实现用户身份识别。重点讲解了code、OpenID和UnionID的作用和使用注意事项。
摘要由CSDN通过智能技术生成

一、背景

开发微信小程序时,用户登录是很重要的一个环节,记录下微信小程序登录流程

二、登录流程

2.1、微信官方文档登录流程图

官网地址👉👉:小程序登录 | 微信开放文档

说明

1、调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。

2、调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台账号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台账号) 和 会话密钥 session_key。

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

2.2、认识code,OpenID,UnionID

①code

临时登录凭证 code:用户使用微信登录小程序时,小程序后台会生成一个临时登录凭证 code。

注意:每个code只能使用一次,具有一定的有效期,一般为5分钟左右。需要将该凭证发送到微信服务器进行验证和换取用户唯一标识。

②OpenID

用户唯一标识 OpenID:用户唯一标识 OpenID 是在用户授权登录后,通过临时登录凭证 code 换取的。

注意:每个微信用户在同一个小程序中的 OpenID 是唯一的,不同的小程序之间的 OpenID 是不同的。可以根据用户的 OpenID 进行用户数据的存储和管理。

③UnionID

唯一标识 UnionID:UnionID 是一个在同一个开放平台账号下的多个关联公众号、小程序和移动应用中,对一个用户的唯一标识。

注意:如果一个用户在多个公众号、小程序和移动应用中都授权登录过,并且在开放平台账号中将这些应用绑定到同一个开放平台账号下,那么这些应用就可以通过 UnionID 来进行用户数据的互通与关联。

三、具体实现

3.1、获取code

在登录页面点击按钮,利用wx.login()获得code

<template>
	<view class="login">
		<view @click="wexin_login">
			<button>手机号快捷登录</button>
		</view>
	</view>
</template>

<script>
export default{
	methods: {
		wexin_login(){
			wx.login({
				success: (res) =>{
					console.log(res.code,'code')
				}
			})
		}
	},
}
</script>

<style scoped lang="scss">
 .login{
	padding: 40rpx;
	button{
		color: #FFFFFF;
		background: #17c7a1;
		border-radius: 50rpx;
	}
 }
</style>

3.2、将code传递给服务器

<template>
	<view class="login">
		<view @click="wexin_login">
			<button>手机号快捷登录</button>
		</view>
	</view>
</template>

<script>
  import {
  	getBindSocial,wxLogin_api
  } from "@/action/action";
  import {
    MINITYPE
	} from '@/constants/hostConfig';
export default{
	data() {
		return {
			phone: '', 
		}
	},
	methods: {
		wexin_login(){
			wx.login({
				success: (res) =>{
					console.log(res.code,'code')
					let userCode = res.code
					//将code传递给服务器
					getBindSocial({
						jscode: userCode,
						type: MINITYPE,
					}).then(res =>{
						console.log('res',res);
					})
				}
			})
		}
	},
}
</script>

备注:

getBindSocial()是封装的api接口,将code传递给接口之后,会得到openid,unionid,phone等。如下图👇

3.3、将获得的unionid传递给接口获得token

<template>
	<view class="login">
		<view @click="wexin_login">
			<button>手机号快捷登录</button>
		</view>
	</view>
</template>

<script>
  import {
  	getBindSocial,wxLogin_api
  } from "@/action/action";
  import {
    MINITYPE
	} from '@/constants/hostConfig';
export default{
	data() {
		return {
			phone: '', 
		}
	},
	methods: {
		wexin_login(){
			wx.login({
				success: (res) =>{
					console.log(res.code,'code')
					let userCode = res.code
					//将code传递给服务器
					getBindSocial({
						jscode: userCode,
						type: MINITYPE,
					}).then(res =>{
						console.log('res',res);
						if (res.code == 0){
							// 是否绑定了已经
							if (res.data.binding == 1){
							this.phone = res.data.phone;
							this.login(res.data.unionid, res.data.openid)
							}
						}
					})
				}
			})
		},
		login(unionid, openid){
			let _this = this;
			wxLogin_api({
				openId: unionid,
      			projectId: ''
			}).then(respon=>{
				console.log(respon,'登录');
			})
		}
	},
}
</script>

备注:

wxLogin_api()是封装的api接口,传递unionid之后后端会返回一个token,这个token将作为身份的唯一标识。如下图👇

3.4、存储token,跳转到首页

		login(unionid, openid){
			wxLogin_api({
				openId: unionid,
      			projectId: ''
			}).then(respon =>{
                //如果返回的token不是undefined
				if(respon.access_token != 'undefined'){
                    //整理接口返回的数据
					let loginInfo = {
      				access_token: respon.access_token,
      				expires_in: respon.expires_in,
      				phone: this.phone,
      				projectIndex: 0,
      				houseIndex: 0,
      				houseData: [],
      				openid: openid,
      				unionid: unionid,
      				refresh_token: respon.refresh_token,
      				userId: respon.user_id
      			};
				  //持久化存储
				  wx.setStorageSync('loginInfo', loginInfo);
				  wx.showToast({
					title: '授权成功',
					icon: 'success',
					duration: 3000,
				  })
				  //跳转到首页
				  setTimeout(() => {
					wx.reLaunch({
					url:'/pages/index/index'
				  })
				  }, 2000);
				}
			})
		}

3.5、登录流程总结

1、获得code:通过wx.login()获取code

2、获得token:将code传递给后端接口获得openid和unionid,再将unionid传递给后端接口获得token

3、本地存储token:将token通过wx.setStorageSync()保存在本地存储

4、用户进入页面判断token值:用户下次进入页面时,会先通过wx.getStorageSync() 方法判断token是否有值;如果有值,则可以请求其它数据,如果没有值,则进行登录操作。

最后,👏👏 😀😀😀 👍👍    

  • 30
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值