文章在保证设计思路的情况下,已隐去了原有的项目名称,把项目名称和数据库字段也使用了别名代替。如有类似关联账户需求设计,可参考本篇设计,实现自己的需求即可。
一、背景
备注:以下 对私的客户端(个人业务)和微信公众号合并简称为 对私的客户端。
背景介绍:项目有个对私的客户端,对私的客户端主要开展个人的等业务;在系统的应用中嵌入了一些其它应用,如对公业务(对公业务可理解为公司级别的业务)。
前段时间,需求方业务有需求,把对私客户端和对公客户端的账号进行绑定,主要实现的功能是:
1、首次进入如有绑定账号实现免登
2、对公对私账号绑定
3、对公对私账号免登切换
4、对公对私账号解除绑定
二、系统介绍
基于前期已有基础的业务进行拓展开发本次模块设计。
已有的系统如下:
对公登录系统(简称A)
对私登录(授权)系统(简称 B)
客户信息记录系统(简称C)
需要开发的系统或业务:
对公对私绑定系统(简称D)
D系统主要提供对公对私账号,提供绑定、切换、解绑、登录时间判定、对外提供接口等功能。
业务主系统接入设计(简称E)
E系统主要是调用D系统,进行账号的关联绑定、账号切换、解绑等功能。同时,E系统是一个前后端分离的项目,关联账户设计只是其中的一个模块,涉及到关联账户的主要为前端提供包含关联账户绑定和实现等。
三、设计思路和实现方案:
一、首先需根据自己的业务确定数据库表的设计,本系统设计的是两张表,主表和副表,主表主要用来供前端查询,展示信息,副表主要做绑定、切换、解除绑定的业务处理,在副表更新时,及时的将主表的信息也进行更新。
1、主表主要做展示用:主要的字段有(表字段已使用字母代替):
对私用户号:ZAId;
对公用户号:ZBId;
对公用户名称:ZBName;
操作员编号:ZCId;
操作员名称:ZCName;
创建及修改基础字段此处就不列出了。
2、副表除主表的字段外,还增加了:
角色编号:FDId;
角色名称:FDName;
客户号:FEId;
客户名称:FEName;
登录次数记录:FFNumber;
最后登录时间:FGTime;
创建及修改基础字段此处就不列出了。
注:因需求业务分展示和账号切换页面,且两页面展示的商户信息不同,所以设计了主附表,其实如果你系统只是单独的账号切换,合适的设计表即可。
账号切换流程图:
账号登出流程图:
执行流程:
1、首先微信公众号或客户端会配置一个进入E系统的链接(链接中包含用户信息的code,绑定登录字段bind,来源source),此请求会对公登录系统E拦截,拦截后会调对私系统B进行换取获取对私用户信息,并根据对公账号是否登录来判断是跳转到登录页还是跳转到业务主系统E的首页。
2、绑定用户:若用户由登录页登录后,会根据用户是否已绑定,来提示用户进行绑定,用户点击绑定则进行绑定,若用户选择不绑定,则在此次整个登录过程中也不再弹出提示用户绑定的弹框,实现就是把用户的点击行为记录在session中做记录,页面跳到首页后会判断用户是否选择。
3、用户可在业务主系统进行除关联账户的操作,具体看自己的业务主要做了哪些功能。
4、切换账号:若用户进行切换账号,切换账号的流程如上图的切换账号流程图所示。切换账号,主要涉及多系统间的信息交换和所要切换账号的更新。
我们这边实现的思路是,用户选择切换,我们会先到D系统,查询选择所要切换的账号,并把该个人用户下,该账号设置为最后登录。当A系统询问D系统所要切换的账号时,D系统把该用户最后登录的账号返回给A系统,A系统拿着要切换的账号到C系统换取该用户的信息并返回给E系统。
当然,中间涉及和B系统对对私用户的信息校验和获取,详细可见图示流程即可。
5、解绑用户,解绑分为解绑当前登录用户和非当前登录用户,若为非当前登录用户则执行解绑操作即可。
若为当前登录用户,则先执行解绑,再执行登出安全登出即可。
6、安全登出:用户执行安全登出操作,E系统先到B系统根据个人用户号换取一个code,并把该code返回给A系统,A系统会执行自己系统的登出操作,跳转到登录页。
四、调试中遇到的问题
1、首先要根据不同的渠道获取不同的对私用户信息,对私用户信息的校验和获取,在系统的传递间有时会出现未传字段或值的情况,这样就获取不到对私用户信息,进而无法获取绑定的账号。解决办法就是在传递用户类似的code的系统或页面间,及时检测是否能正常获取对应的code,没有则看如何才能传递过去。页面间传递的话,可放在sessionstorage中。
2、不论是在登录页登录还是绑定登录,都需要在登录前获取设备指纹信息上送给风控平台,所以在跳转登录页前需要loading,获取设备指纹后传给A系统,A系统上送风控系统。设备指纹的获取要调试好,loading和跳转主页重定向的问题。
五、结果和说明
系统间协调调用,主要是为了解决安全问题,像从对私登录系统获取的code,经对公系统到对私系统验证一次后即失效,可保证系统间访问更安全。
经实现和调试后,该系统可实现账号绑定、切换、解绑的功能。
如有其它问题,欢迎大家来提问。