单点登录
一个地方登录,旗下所有的网站都登录了。
这里面要解决一些跨域的问题,这是浏览器的安全策略。
大家可以看看淘宝和天猫的案例。
- 当你登录了天猫,淘宝也登录了;
- 当你登录了淘宝,天猫也登录了;
- 当你退出了淘宝登录,天猫也退出登录了;
- 当你退出了天猫登录,淘宝也退出登录了;
怎么实现的呢?可以看看以下这个思路。
阳光沙滩模块
我们目前的板块有:
- 博客(笔记)
- 问答(学习讨论)
- 学院(视频,笔记,学习接口)
- 摸鱼(日常分享)
- 商城(购物,领券,服务器优惠)
阳光沙滩将会拆分为:
- 领券商城(www.taobaounion.cn)
- 摸鱼君(www.moyujun.com)
- 门户(www.sunofbeach.cn)
- 管理中心(mp.sunofbeaches.com)
- 账号中心(account.sunofbeaches.com)
以上暂时未上线,大家访问不了,敬请期待。
这么多个网站,并且域名是不一样的,怎么样才可以在一个地方登陆,所有的地方状态都登陆上了呢?
单点登陆的思路
有这么多的模块,我们只要在同一个地方进行登录管理即可。
所以上面有一个模块是账号中心。在账号中心登录了,访问所有的网站都可以登陆了。
具体的思路是什么样子的呢?
正常的登录流程:
- 在任意一个网站入口点击登陆,跳转到账号中心(account.sunofbeaches.com)进行登录
- 跳转到登录中心后,携带来源路径,比如说:www.moyujun.com
- 在账号中心进行登录,登录完以后,account.sunofbeaches.com这个域名下的前端,一定登录了,也就是有token了。
- 携带token跳转到第2步中地址,token携带在query中
- 来源地址访问的时候,拿着携带的token检查token是否有效,有效则写到来源地址下的cookie中
- 这样子,就完成了登录。同时登录了account.sunofbeaches.com和来源地址。
前面已经完成了登录了,理论上来说,访问阳光沙滩旗下的其他网站,是不需要再登录的了,怎么实现呢?
其他网站的登录流程:
- 访问其他网站,比如说mp.sunofbeaches.com
- mp.sunofbeaches.com检查是否有token,cookie中,或者query上
- 没有token跳转到account.sunofbeaches.com
- 有token检查token是否合法即可有登录状态,未登录的话还是跳转到account.sunofbeaches.com
- 跳转到account.sunofbeaches.com有两种情况
- 之前已经登录过的,也就是走了前面的流程,account.sunofbeaches.com这个网站,已经登录的了。携带token在query跳转到来源网站进行校验,让目标网站登录成功。
- 未登录,登录流程,登录完以后,走跳转的流程。
- 到此,在前面已经有登录的基础上,就可以旗下的网站登录成功了。
以上内容,重点是: - 登录 - 检查登录 - 登录状态在account.sunofbeaches.com是保有的。
退出登录
很简单,让后台的token失效,当前端去检查token时,失效了,删除前端的即可。