美文网首页小程序开发技术知识
微信小程序保持登录态

微信小程序保持登录态

作者: 此行欲上天 | 来源:发表于2018-05-03 16:00 被阅读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() //重新登录
        ....
      }
    })
    

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

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

    相关文章

      网友评论

        本文标题:微信小程序保持登录态

        本文链接:https://www.haomeiwen.com/subject/gaflrftx.html