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

需求场景

  1. 每个用户都存在多个不同的注册登录方式,比如微信,QQ,微博.
  2. 登录方式在未来可能增加或者减少.
  3. 用户在使用不同的途径注册登录之后就成为独立帐号,每一个独立帐号又可以互相绑定.
  4. 绑定之后的帐号视为一体,但是仍然可以使用不同途径登录.
  5. 相互绑定之后的帐号,可能在系统留存大量数据,不适合数据迁移.
  6. 用户的主要帐号(例如手机号)可以被多次绑定到不同的第三方帐号上,拥有相同主帐号的帐号视为同一帐号,数据互通.
    本文教程实现一个能满足以上描述的帐号系统,至于大家在实际项目中可以根据自己需求,在逻辑业务中禁止或允许用户相关行为.

难点分析

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

设计原理

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

数据库设计

可扩展帐号系统的设计

Users表设计

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

idphone(主帐号)balancenicknamewx_openidqq_openidweibo_openid
6100861000(币)啊Caaabbbccc
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值