mysql多种登录⽅法_⽀持多种登录⽅式的数据库设计
2022年两会重点内容是什么⼀个带有⽤户系统的应⽤最基本登录⽅式是站内账号登录,但这种⽅式往往不能满⾜我们的需求。现在的应⽤基本都有站内账号、email、⼿机和⼀堆第三⽅登录,那么如果需要⽀持这么多种登录⽅式,或者还有银⾏卡登录、⾝份证登录等等更多的登录⽅式,我们的数据表应该怎么设计才更合理呢?
⾸先,⼀个⽤户不管有多少种登录⽅式,⽤户还是只有那⼀个⽤户,但登录⽅式却有多种。这就形成了⼀对多的关系:⼀个⽤户对应多个登录⽅式。
所以,我们就可以把⽤户表拆分成2张表,⼀张表存储⽤户基本的数据,另⼀张表存储登录授权相关的数据。我们可以向下⾯这样设计:
车险险种
这样我们创建⼀个⽤户,⾸先需要创建⼀条⽤户表的⽤户基础信息记录和⼀条或者多条授权表的授权记录。注意修改密码时也需要同时修改多条授权表记录,保证需要密码的登录⽅式凭证需要同步更新。
囚⽤户发来邮箱/⽤户名/⼿机号和密码请求登录的时候,依然是先判断类型,以某⽤户使⽤了⼿机号登录为例,使⽤ SELECT * FROM USER_AUTHS WHERE IDENTITYTYPE='⼿机' AND IDENTIFIER='⼿机号' 查条⽬。如有,则取出并判断密码是否和该条⽬的CREDENTIAL相符,相符则通过验证,随后通过USERID获取⽤户信息。
如果使⽤第三⽅登录,则只要判断 SELECT * FROM USER_AUTHS WHERE IDENTITYTYPE='' and IDENTIFIER='号'。如果有记录,则直接登录成功,使⽤新的token更新原token。假设与服务器通信不被劫持的情况下⽆需判断凭证问题。
白露是几号通过这种表结构设计,使许多原来纠结的问题瞬间解决。
优点:
1、站内登录类型⽆限拓展,代码改动⼩。如果真要⽀持⾝份证登录了,只要少许⼏处改动,⽆需修改表结构。
2、第三⽅登录类型可⽤⼯场模式批量拓展,新增第三⽅登录类型的开发成本降到最低。
3、在USER_AUTHS表中增加⼀个统⼀的verified字段,每种登录⽅式都可以直观看到是否已验证情况。基于信任第三⽅登录的数据准确性,默认第三⽅登录都是已验证。如果⽤户修改登录⼿机号或登
录邮箱,也能清晰跟踪每⼀步的完成度。
4、可按需绑定任意数量的同类型登录⽅式,即⼀个⽤户可以绑定多个,可以有多个邮箱,可以有多个⼿机号,是不是很赞!当然你也可以限制⼀种登录⽅式只有⼀条记录。
5、在USER_AUTHS添加相应的时间和IP地址,就可以更加完整地跟踪⽤户的使⽤习惯(此部分应该单独建⽴⽇志表)。⽐如,已经不使⽤微博登录两年多,已经绑定300天。
6、即使完全使⽤第三⽅帐号登录,可在前端做到“⽆需注册本站帐号”的效果。过去许多⽹站虽然⽀持第三⽅帐号登录,但出于留存⽤户等原因,第⼀次微博登录回来,让你再填写⼀套他们⽹站的邮箱、密码等信息,也就失去了微博登录的最⼤意义。
从技术上说,原有的结构导致除了在微博⽤户表建⽴⼀个条⽬外,必须在⽤户表建⽴⼀条对应的条⽬,⽽且⼀般情况下不能让⽤户表⾥的邮箱或者⽤户名和密码留空。⽤户体验好的,邮箱⾃动⽣成 微博ID@id.weibo.sina ,密码则随机⽣成。⾄于体验不好的,只能说早知道还不如不⽤微博登录呢!现在呢,我们的这个⽤户表结构则完全没有这样的困扰,只要微博提供的昵称和头像地址就可以⽣成这个⽤户,再关联他的微博登录记录。⽽且我们的表结构意味着,⽤户可以解除他的所有登录⽅式,于是这个账户便彻底变成了没法登录的僵⼫(解决办法是在代码⾥加⼀个限制,⾄少保留⼀条USER_AUTHS的记录)。如果你⾮要得到⽤户的邮箱,那么每次登录的时候看到他不存在⼀条IDENTIqq飞车音乐库
TYTYPE为email的记录,则弹窗弹死他,让他赶快填邮箱,否则啥都别⼲。
7、提升了逻辑思维能⼒。抽象出事物本质是码农必备职业素养。
8、如果你说邮箱和⼿机号就是⽤户信息的组成部分,他们依然需要体现在USERS表中作为前端展⽰。USERS表尽管拓展,USERS表⾥依然有email,phone。但它们仅仅作为“展⽰⽤途”,这和昵称、头像、或者性别这些属性没有本质区别。在⽤户信息表与⽤户授权登录拆分后,⽤户信息表可以随时增加任意字段,加星座,加⽣⽇,都没问题,只需要在前端展⽰时多⼏个输⼊框,录⼊时多⼏⾏代码,与⽤户登录相关的问题做到最⼤程度解耦。
缺点:
1、原先的⽤户判断由1次SQL变成2次SQL请求。
怎样将百度设为主页2、⽤户同时存在邮箱、⽤户名、⼿机号等多种站内登录⽅式时,改密码时必须⼀起改,否则就变成了邮箱+新密码,⼿机号+旧密码访问了,肯定是很诡异的情况。如果考虑到这⼀点,⼜要在USER_AUTHS表中新增⼀个表⽰站内登录⽅式或第三⽅登录⽅式的标识字段。
3、代码量增加了,有些情况下逻辑判断增加了,难度增⼤了。
举个例⼦,⽆论⽤户是否已登录,⽆论⽤户是否已注册过,都是点击同⼀链接前往微博第三⽅授权后返回,可能出现⼏种情况:
1)该微博在本站未注册过,很好,直接给他注册关联并登录;
2)该微博已经在本站存在,当前⽤户未登录,直接登录成功;
3)该微博未在本站注册,但当前⽤户已经登录并关联的是另⼀个微博帐号,作何处理取决于是否允许绑定多个微博帐号;
4)该微博未在本站注册过,当前⽤户已登录,尝试进⾏绑定操作;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论