出现偶尔bug
当小程序上线后,有用户反馈会重复出现“会话已过期,是否跳转登录页面?”对话框。这个问题之前没有本地没有复现,不知道怎么排查。于是到今天,我打开小程序的时候出现了这个情况,于是开始了排查之路。像这种偶然性的bug是不好排查的,必须得复现当时场景才有可能去找到问题所在。
排查步骤
1、检查前端登录流程,看看接口是否存在异步发送情况。这个小程序登录流程为:跟微信接口换取openid后,服务器生成对应用户token,返回给小程序使用。带身份的接口都需要携带token去请求数据,如token无效则会返回前端并提示如上错误。因此先判断是不是有部分接口先于登录接口发送了。
2、接口没有异步提前请求,那就看服务器日志,查看携带的token是哪个,经过查询日志,发现登录接口没问题,有问题的是后面的接口并没有携带token,此时token为空。
3、再检查登录流程和之后的接口请求,发现在登录成功后返回的token,在
that.$store.commit('loginStore', res.data.data);
这存入的时候,里面token存值使用了uni.setStorage,这个接口方法是异步的,这就导致了后续的接口拿不到token,因此服务器返回需要登录,这就导致了这个问题的出现。
解决
将存储的异步接口改成同步接口,确保在请求前。token顺利存储