支持多种登录方式的数据表设计

一个带有用户系统的应用最基本登录方式是站内账号登录,但这种方式往往不能满足我们的需求。现在的应用基本都有站内账号、email、手机和一堆第三方登录,那么如果需要支持这么多种登录方式,或者还有银行卡登录、身份证登录等等更多的登录方式,我们的数据表应该怎么设计才更合理呢?

需求分析

实现多种登录方式,并且除了站内账号登录方式以外的登录方式,都能够进行绑定和解绑或者更换绑定。

如果按照传统的数据表设计,我们用户表会存储用户的账号和密码等授权相关的字段,类似下面:

但是如果登录方式非常多的情况下,这种数据表结构不再适用。那么应该怎么设计呢?在查阅了一些资料后,本渣渣终于有了一个自我感觉很合理的设计方式。

首先,一个用户不管有多少种登录方式,用户还是只有那一个用户,但登录方式却有多种。这就形成了一对多的关系:一个用户对应多个登录方式。

所以,我们就可以把用户表拆分成2张表,一张表存储用户基本的数据,另一张表存储登录授权相关的数据。我们可以向下面这样设计:

users

user_auths

这样我们创建一个用户,首先需要创建一条 users 表的用户基础信息记录和一条或者多条 user_auths 表的授权记录。注意修改密码时也需要同时修改多条 user_auths 记录,保证需要密码的登录方式凭证需要同步更新。而第三方的授权凭证和需要密码的授权凭证则不需要同步。

代码实现

这里我使用 laravel 来实现简单的用户注册、登录、修改密码等操作,仅供参考。

首先创建2张数据表,结构如下:

users

user_auths

实现注册功能,创建站内账号,一个用户 + 一个站内账号登录授权。

实现登录,站内账号、邮箱、手机号码登录方式。

实现修改密码,站内登录、邮箱登录、手机登录同步修改。

例子中路由相关代码直接无视!如果后期需要新增或删除登录方式,只需要新增或删除 user_auths 表中的记录。如果是判断邮箱、手机是否已经验证,也只是操作 user_auths 表中的 verified 字段即可。

六阿哥

目前评论:5   其中:访客  4   博主  1

  1. avatar ios码农 0

    大神出点php写API 的教程呗

  2. avatar liii 0

    感谢分享。美剧看多了,看到sex直接翻译成xx00,貌似更好gender

  3. avatar aaa 0

    我以前是做iOS开发的,现在在做PHP,而且一开始学的就是Laravel。 :mrgreen:

  4. avatar 0

    :wink: :wink: :wink: 非常赞

评论加载中...

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: