您的位置:首页 > 其它

可绑定可扩展的帐号系统设计原理及其实现

2017-12-14 16:10 344 查看

需求场景

每个用户都存在多个不同的注册登录方式,比如微信,QQ,微博.
登录方式在未来可能增加或者减少.
用户在使用不同的途径注册登录之后就成为独立帐号,每一个独立帐号又可以互相绑定.
绑定之后的帐号视为一体,但是仍然可以使用不同途径登录.
相互绑定之后的帐号,可能在系统留存大量数据,不适合数据迁移.
用户的主要帐号(例如手机号)可以被多次绑定到不同的第三方帐号上,拥有相同主帐号的帐号视为同一帐号,数据互通.

本文教程实现一个能满足以上描述的帐号系统,至于大家在实际项目中可以根据自己需求,在逻辑业务中禁止或允许用户相关行为.

难点分析

随着时间推移,后期可能增加更多登录的途径,所以系统需要使用可扩展的方式实现
假设用户已经用手机号码注册过(这里称为老帐号),此时如果使用微信登录并且完成了相关购买等,再绑定到老帐号上,这时候需要实现用户新旧数据合并,以确保前端展示的数据和用户的真实查询一致;如果再加入QQ登录并且绑定同个手机号,同样需要把QQ操作的数据绑定到老帐号上,拥有相同老帐号的帐号数据互通.此处也为一难点,需要灵活处理.
用户绑定数据之后,其实就相当于只有一个主帐号被使用了.其他第三方帐号比如微信,在微信登录的时候,仍然需要通过微信特征(openid)进行用户登录验证.因此需要保留第三方帐号的关键数据,如果直接把这个关键数据所有字段放入帐号表,则以后多增加一种方式都需要去修改一下数据表字段,这显然是不可取.此处的设计也是一要点难点.

设计原理

  难点分析一节已经描述了潜在的设计难点,接下来分别从数据库设计,程序逻辑设计两大部分阐述设计的原理

数据库设计

可扩展帐号系统的设计

Users表设计

  相信大部分同学一开始想到的就是在users表中增加第三方登录的唯一表示字段.比如在users表的用户名,密码,基础上增加一个wx_openid,用来表示微信唯一标识,qq_openid用来表示QQ唯一标识.然后表的主要字段看起来就像这样:

idphone(主帐号)balancenicknamewx_openidqq_openidweibo_openid
6100861000(币)啊Caaabbbccc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: