加班处理sso免登问题
今天周六,昨天是常规版本日,但是由于昨天之前负责的一个系统出现了一个小问题导致未正常发版延期到周日,计划今天跟明天两天修复这个问题。
问题就是sso免登的时候,被免登系统出现跳转体验不到的问题,本来应该跳转到某个菜单,但是开发人员实现的是先跳转到另一个菜单再跳转到正确的菜单,导致用户在验收的时候不接受。
在跟开发人员确认需求跟逻辑的时候发现其实改动的不多,只是在模拟了点击事件,中间饶了一大圈,经过今天的修改,实现了直接跳转,但是又遇到了一个拿不到用户信息的问题,经过定位确定是之前没考虑sso的场景导致后面的接口拿不到正确的参数。
最终解决办法就是在跳转的地方优化,还有在iframe加载的vue项目里面的公共页面home的beforeRouterEnter方面里面调用用户信息接口,终于解决改问题,看明天用户验收结果。
其实对于sso很容易的出现的问题就是异步请求,即后面的接口请求依赖前面的用户信息接口返回的数据,但是获取用户信息接口跟后面的接口是同时请求的,所以解决的办法就是在后面的接口请求前保证能拿到用户信息,需要在router.beforeEach或者公共的页面的beforeRouterEnter里面调用用户信息接口,这里需要先判断如果缓存中已存在该数据则不调用,否则调用接口,再把数据存到浏览器缓存。
因为正常通过登录页面的场景是在登录成功后就会返回用户信息或者在调用完登录接口后在调用获取用户信息接口,这样就保证了在后续的接口调用的时候是能正常拿到用户信息的,但是对于sso这种场景就不适用了。
因为sso这种不会有经过登录页面的过程,即用户在另一个系统登录后,直接通过链接打开我们的系统的某个页面,这个时候是需要直接登录的,一般的系统交互都是通过cookie来实现的,对于微服务比较方便,因为共享一个网关,这个过程通过网关就可以轻易实现,但是如果没有网关的系统只能通过请求头中的cookie来实现了,因为共享同一个用户中心,所有登录产生的cookie正常只能有半小时的有效期,也就是半小时内跳转有效,但是超过半小时就失效,当然如果你的系统通过redis保存了用户登录信息,那么这个时间是可以保留更长的时间的,你甚至可以在redis里面保存两个小时。
但是如果系统不通过redis保存的话就只能依赖用户中心默认的半小时的有效期控制。
总之,sso需要各个系统之间做好配合,如果是微服务就可以很快时间,如果不是那就要花点时间处理,前提是要了解这个流程,了解自己的系统。
发表评论 (审核通过后显示评论):