一个登录功能是基于oauth2协议的,oauth2协议核心是先拿code,通过code拿token。 结合统一认证功能,这个登录页面是另外一个单独的系统,当处于token有效状态时,打开登录页面会跳转到应用系统,应用系统拿之前的有效token继续,直到token失效或用户点击退出登录。
这里面的token是没有刷新有效期的功能的,如果token过期,打开应用系统页面访问接口,那么页面会提示token过期,清空token,跳转到登录页面,然后重新登录,因为清空了token所以拿到code走请求token的流程。
如果在另一个浏览器登录,是另外的事情,但又因为是一个账号只能在一个浏览器登录,按一般的使用来说增大了token失效的概率。不过用户清楚这一点就行了。
这里主要记录这种情况:当浏览器关闭后过一段时间token失效了(或者另外浏览器登录成功后这个浏览器的token失效了),这时用户打开这个浏览器登录页面登录跳转到应用系统,但尽管应用系统的token失效了,而当首先判断有没token作为是否登录有效,就导致登录后再退出登录。这里的判断有没token作为是否登录状态本身就错误。而当登录成功后继续使用快要过期的token,那么也会导致登录有效期和用户不符合预期。
这个问题应该比较常见。这时应该是以新的token来使用。所以这里的判断逻辑首先判断code是不是新的,走请求token的逻辑然后更新token。这个解决了从登录页面登录后紧接着退出登录的这个异常,如果直接访问应用系统页面是跳转到登录页面,这看起来还正常,但也有点多余想去掉但如果又想保留过期提示,这个似乎不好搞。(这个在路由的code有漏洞待触发)
记录一下,后端做的限制是等保要求的时间,并且没有刷新token机制。
又发现个问题,使用登录链接访问登录页面,当处于登录状态,登录页面直接跳转到应用页面并且带上新的code。我应该拿这个code去更新token,也要注意同一个code不能用来调两次接口来请求token。