小程序开发技术知识

微信小程序保持登录态

2018-05-03  本文已影响132人  此行欲上天

随着小程序的使用越来越广泛,公司也逐步开始了小程序项目的开发。本人作为公司开发小程序的试水员,必不可少的就是踩坑。而在开发中踩过的大大小小的坑中,因为登录态的失效而导致的问题是最令人头疼的。

首先上图了解小程序维持登录态的流程(参考自微信小程序官方文档):

登录流程时序图

简单解释一下:

1.小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
2.开发者服务器以code换取 用户唯一标识openid会话密钥session_key
3.之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:临时登录凭证code只能使用一次。

好了,下面终于可以进入正题了。

当我们在获取用户信息(例如wx.getUserInfo和getPhoneNumber)时,返回的数据中包含encryptedData和iv两个字段,我们需要拿到这两个字段传到内部服务器上进行解密。而解密所需要的session_key是有时效性的,这一点不管是对于前端还是后端来说都很难受,毕竟我们不知道何时session_key才会失效。

在之前的开发中,每当获取用户信息解密时,总是会出现解密不成功的问题。因为session_key是保存在服务端的,而session_key又是客户端调用wx.login来获取code后换取的,所以我们当时并不清楚解密不成功是何原因。

话归正题,其实在向服务器传encryptedData和iv两个字段时,需要提前调用一下wx.checkSession来判断一下session_key是否已经失效,如果未失效可以将两个加密字段直接传给服务器,如果已经失效,那么我们需要重新调用一遍登录流程,使服务端更新session_key,然后才能将加密字段传给服务器,代码如下:

wx.checkSession({
  success: function(){
    //session_key 未过期,并且在本生命周期一直有效,直接发送加密字段
  },
  fail: function(){
    // session_key 已经失效,需要重新执行登录流程
    wx.login() //重新登录
    ....
  }
})

现在解决了问题,而且看起来解决方法很简单,但是没有仔细看文档可是很难想到解决方法哦。

感谢看完文章,希望对您有用!

上一篇下一篇

猜你喜欢

热点阅读