流程
- 未登录的用户访问项目页面会带着当前页面url信息跳转到登陆页面
- 浏览器发送请求,验证登录页面的localstorage是否存有token以及token是否失效,若token没有或失效,用户需要在登陆页面填写登陆信息后确认登陆,浏览器发送请求获取新的token并存入登陆页面的localstorage
- 浏览器取出登陆页面localstorage中的token并生成带有token的请求参数,如:?token=xxxxx
- 判断登陆页面当前路径是否含有url请求参数,若没有url参数则会生成前往默认项目的路径,有url参数则取出url中的路径
- 浏览器把token信息放于生成的路径后并跳转到对应项目页面
- 跳转后项目页面记录token到localstorage
- 登陆成功
注意点:
- 上述4中的判断是为了考虑用户不是通过项目跳转到登陆页面而是直接键入登陆页面地址的情况。
- 当用户登录项目A后登录不同域名下的项目B,由于跨域localstorage不共享,项目B的localstorage并没有保存可用token。此时项目B会跳转到登陆页面,而登录页面在登陆项目A时已经保存了一份可用token,所以会带上token直接跳转回项目B。用户无需再次进行登录操作,但会有两次额外的自动跳转。
其他方案
- 使用iframe将登陆页面嵌套到各个项目,所有域名的项目都从iframe中取localstorage的token。优点为跨域登录无需多跳转两次,缺点为iframe不稳定。