登陆这块是基本每一个 APP 都须要用到的技术,小程序这边的登陆和其余的有点不一样,本篇文章主要讲下登陆这块的坑。小程序
首先看一下文档里介绍登陆的图
缓存
首先在第一个页面中调用 ws.login()
获取 code,而后在图片中写着直接将 code 发送给本身的后台,这其中少了一步调用 wx.getUserInfo
来获取一段加密串,获得这段加密串后将加密串和 code 一块儿发给服务器,而后服务器经过 APPID, APPSecret, code 参数请求微信服务器得到 session_key 和 openid。而后经过得到的 session_key 去解密以前发过来的加密串获得 unionid。服务器
unionid 和 openid 是不一样的,首先在小程序中得到 unionid 是须要先在微信后台绑定公众号,而后绑定小程序,才能得到 unionid 的。微信
unionid 和 openid 的区别在于,当咱们分别有多个不一样应用时,只经过 openid 去绑定微信账号和用户账号会账号不统一,由于 openid 在多个应用间是不一样的,而后 unionid 在多个应用间是相同的,经过 unionid 去绑定微信账号和用户账号能完成多个应用间的账号统一,节约运营成本。cookie
接下来服务器经过一段规则生成 3rd_session,并以 3rd_session为 key,session_key + openid 为 value,写入 session 存储。session
服务器生成 3rd_session后,将 3rd_session 返回给客户端,客户端将 3rd_session 写入缓存。加密
图中写明在小程序请求时须要加上 3rd_session,这是由于小程序的请求是不支持传递 cookie 的,须要在 header 中自定义 key,将 3rd_session 做为 value 发送出去,服务器先检测 3rd_session 对应的 seesion_key 是否过时,若是过时,须要客户端从新发起 ws.login()
。code
以上即是完整的登陆请求流程。cdn