解密手机原理:微信小程序是通过wx.login生成code,然后传给后端,后端在通过code拿到用户信息,再通过sessionKey和用户信息来解密得出手机号的
报错原因:用户退出登录后登录,因为wx.login一直在 刷新code,在小程序给的nodejs解密中,报错原因是因为该解密的sessionKey没过期而不认新的sessionKey,所以会报Illegal Buffer
解决办法:把用户信息存数据库,然后给openid加密,充当登录态token,再把token返回小程序,小程序将其储存于 本地缓存中,后面退出登录 后拿本地缓存中的登录态 来获取用户数据,从而绕过再一次解密手机号。(ps:第一次登录解密是没问题的,因为没有旧的sessionKey干扰)
PS:为什么要存数据库?而不存redis这些?因为redis会定时被清除,而小程序希望一直是登录的,除非自动退出,所以当退出 后在登录,这时redis已经被自动清除,所以拿不到用户信息,所以改存mysql。
PS:为什么用openid来加密,而不是用自动生成一个加密码?因为经过我们测试,发现储存在本地缓存的token有时会被自动清除??一开始我们也是问号,然后通过如果返回为空,在 重新调用wx.login,再一次重新登录来 获取用户openid,然后再跟数据库对比,拿出用户数据,绕过这种情况
PS:wx.login不要每次都调用,用wx.checksession来判断是否过期,过期重新调用