新项目的小程序注册登录逻辑是调用微信接口获取openId,如果数据库中存在这个openId则说明是登录,如果不存在openId则说明该用户需要注册。这是前端会给用户一个弹窗要一个授权,用户授权之后前端给后端传一个code。后端拿着这个code调用微信的接口获取到用户的手机号。获取到了用户的手机号之后就吧手机号和openId一同添加到库里。
用户登录进小程序之后可以修改昵称和头像,前端直接调用微信的接口就可以直接获取到当前微信的昵称和头像,前端只需要调用接口就好了。这里前端忘记写获取微信昵称了,先用默认值代替。
走到这里就遇到问题了,后端接收到前端穿的参去数据库中修改信息,信息确实也修改了。但是前端调用gteinfo()接口就是修改之前的数据。但是如果退出重新登录,换个新的token显示的内容就是修改之后的内容。如果用户每次修改之后都需要重新登录明显是不现实的。
来分析一下问题,数据更新后,调用的是gteinfo()接口。gteinfo()调用的时候不需要传参,只需要吧用户的token传到请求头里就行。两次数据的差异明显是差异再token中。getinfo()中返回user数据是在缓存中取的。
到这里我的第一反应就是数据存在redis中了。然后我就去百度查redis更新缓存。但是百度的大部分都是分析若依源码的东西帖子,看了看并没有更新缓存的操作。
后来我问朋友,朋友帮我分析了一下。用户信息并没有存储到redis中,而是存储到了安全框架中,每次修改用户信息的时候调用一下刷新操作就好了。
以上只记录debug的过程