小程序登录流程

登录流程

  • 三个角色:
  • 小程序端
  • 微信自己的服务器
  • 公司的服务器

appId 作用说明

  • appid 是微信账号的唯一标识,这个是固定不变的;
    如果了解微信公众号开发的就需要注意一下,小程序的appid 和 公众号的appid 是不一致的

openid

  • openid:每一个微信用户的唯一标识
    openid一般不保存在客户端,一般保存在服务器端。
    我们自己的服务器会和微信的服务器进行通信。到时候微信的服务器就会返回一个session_key和openid,到时候我们的服务器会把这个openid存到数据库中。

session_key 功能说明

  • 微信客户端通过wx.getUserInfo()获取用户的信息
    后台有时候也需要获取微信客户端的用户信息,因此,就需要利用session_key这个秘钥来从微信平台中获取
  • 签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。
  • 后台如果想要获取用户的信息,就一定要知道session_key,如果session_key 过期,就需要客户端完成一次登录的流程
    在这里插入图片描述

登录的过程:

我们的小程序端先调用接口 wx.login(),向微信的服务器发送请求,获取到一个code,这个code在我们的客户端是没有用的。
1.1 这个code的作用是发送到我们自己的服务器
1.2 微信小程序端通过调用wx.request()将code发送到我们的服务器
1.3 服务器拿到code和appid(一开始申请到的)和appsecret
1.4 appsecret是怎么获取的:在小程序控制台,和appid在一个地方,可以重置。

我们的服务器与微信的服务器进行一次沟通,将code+appid+appsecret这三个东西传递给微信的服务器,

微信的服务器会返回session_key和openid。服务器就拿到了openid,不会传给客户端,而是将openid存到服务器。
3.1 有时候,公司希望不仅能用微信登录,还可以用用户名+密码登录小程序。
3.2 一般用账号+密码登录的时候,会在第一步,先让用户输入用户和密码,服务器验证通过以后,再将账号+密码+code发送给微信的服务器,换取openid;之后将openid+账号+密码存储在数据库的某个表中(t_user)。

服务器端验证通过之后,会向客户端返回一个token,登录状态。客户端会把token保存起来。小程序中有个storage,一般将token保存在storage中。

下次再打开小程序的时候,就可以先从缓存中拿出token来,发送给服务器,验证一下是否过期,不用每次打开都登录一下了。如果过期了再登录,没过期的话就直接使用这个。

以后客户端向服务器发送请求(请求需要在登录的状态下才会返回结果时),会携带token。服务器会根据token查询openid或者session_key和其他数据。然后将数据返回给客户端。

简化后的流程:

调用wx.login获取code

调用wx.request发送code到我们自己的服务器(我们自己的服务器会返回一个登录状态的标识,比如token)

将登录状态的标识token进行存储,以便下次使用

请求需要登录状态的接口时,带上这个token。

登录流程图

在这里插入图片描述

获取用户信息

  • wx.getUserInfo(OBJECT)
  • withCredentials:true
    当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。
wx.getUserInfo({
	lang:'zh_CN',
	withCredentials:true, //withCredentials 为 true 时需要先调用wx.login接口
	success: function(res) {
		console.log(res)
    }
})
  • 返回参数
    在这里插入图片描述
// iv 解密后为 用户的session-key
HyVFkGl5F5OQWJZZaNzBBg==

// encryptedData 解密后为以下 json 结构
{
    "openId": "OPENID",
    "nickName": "NICKNAME",
    "gender": GENDER,
    "city": "CITY",
    "province": "PROVINCE",
    "country": "COUNTRY",
    "avatarUrl": "AVATARURL",
    "unionId": "UNIONID",
    "watermark":
    {
        "appid":"APPID",
    "timestamp":TIMESTAMP
    }
}

静默授权

  • 小程序静默注册登录+授权
  • 要授权就要token,下面教你怎么获取koken
1.wx.login API 可以获得随机的code码,这个code码可以在后台获取token。
拿api工厂为例,这个code码传给后台就能拿到token

wx.login({
	success: function(res) {
		// 获取到 code 将code 传过去请求接口
		// 接口返回 token 和 openid
		uni.setStorageSync('token ', res.data.data.token);
		uni.setStorageSync('openid', res.data.data.openid);
	}
})

2.获取完token后台会生成一个匿名信息,这时候调用

wx.getUserProfile 获取你的wx个人信息
详见:wxAIP文档
把个人信息和生成的tonken传给后台的修改接口就可以把你用tonken生成的匿名信息补全
AIP工厂的修改接口如下:
user/modify
这一步就完成了授权

修改完以后再去后台请求用户信息的接口,这样请求的接口就是完整的,就可以渲染到页面了
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值