可绑定可扩展的帐号系统设计原理及其实现
2017-12-14 16:10
344 查看
需求场景
每个用户都存在多个不同的注册登录方式,比如微信,QQ,微博.登录方式在未来可能增加或者减少.
用户在使用不同的途径注册登录之后就成为独立帐号,每一个独立帐号又可以互相绑定.
绑定之后的帐号视为一体,但是仍然可以使用不同途径登录.
相互绑定之后的帐号,可能在系统留存大量数据,不适合数据迁移.
用户的主要帐号(例如手机号)可以被多次绑定到不同的第三方帐号上,拥有相同主帐号的帐号视为同一帐号,数据互通.
本文教程实现一个能满足以上描述的帐号系统,至于大家在实际项目中可以根据自己需求,在逻辑业务中禁止或允许用户相关行为.
难点分析
随着时间推移,后期可能增加更多登录的途径,所以系统需要使用可扩展的方式实现假设用户已经用手机号码注册过(这里称为老帐号),此时如果使用微信登录并且完成了相关购买等,再绑定到老帐号上,这时候需要实现用户新旧数据合并,以确保前端展示的数据和用户的真实查询一致;如果再加入QQ登录并且绑定同个手机号,同样需要把QQ操作的数据绑定到老帐号上,拥有相同老帐号的帐号数据互通.此处也为一难点,需要灵活处理.
用户绑定数据之后,其实就相当于只有一个主帐号被使用了.其他第三方帐号比如微信,在微信登录的时候,仍然需要通过微信特征(openid)进行用户登录验证.因此需要保留第三方帐号的关键数据,如果直接把这个关键数据所有字段放入帐号表,则以后多增加一种方式都需要去修改一下数据表字段,这显然是不可取.此处的设计也是一要点难点.
设计原理
难点分析一节已经描述了潜在的设计难点,接下来分别从数据库设计,程序逻辑设计两大部分阐述设计的原理数据库设计
可扩展帐号系统的设计
Users表设计
相信大部分同学一开始想到的就是在users表中增加第三方登录的唯一表示字段.比如在users表的用户名,密码,基础上增加一个wx_openid,用来表示微信唯一标识,qq_openid用来表示QQ唯一标识.然后表的主要字段看起来就像这样:id | phone(主帐号) | balance | nickname | wx_openid | qq_openid | weibo_openid | … |
---|---|---|---|---|---|---|---|
6 | 10086 | 1000(币) | 啊C | aaa | bbb | ccc | … |
相关文章推荐
- 可绑定可扩展的帐号系统设计原理及其实现(一)
- Round-Robin负载均衡算法及其实现原理& Linux下双网卡绑定bond0
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- 使用JDBC连接MySQL数据库--典型案例分析(九)----财务帐号的DAO设计及其实现
- Linux下一个简单的日志系统的设计及其C代码实现
- 基于视频处理的DSP系统通用设计模式及其实现
- Linux下一个简单的日志系统的设计及其C代码实现
- 破解某科大校园网帐号密码程序的设计及其实现
- 微信云控系统的实现原理,微信云控系统源码之服务器推送的实现及其核心代码
- 【VB+数控原理与系统】数控原理与系统课程设计刀具半径补偿直线-直线VB模拟软件实现
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- 计算机USB系统原理及其主从机设计.pdf
- ext系列的文件系统原理及其实现
- 《华油能源OA系统数据同步和扩展的设计与实现_张宇峰》阅读笔记
- 基于RBAC扩展模型的实验室综合管理系统设计与实现
- 异地容灾系统和数据仓库中数据同步的设计及其关键技术实现
- JWT认证标准原理 及在微服务系统中的设计及实现
- 基于HTTP登录系统的扩展(代码设计实现UI部分)
- Linux下一个简单的日志系统的设计及其C代码实现
- Linux下一个简单的日志系统的设计及其C代码实现