转自:https://www.cnblogs.com/vandusty/p/11427451.html
现在几乎大部分的App
都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。本文不提供任何代码实操,但是梳理一下博主根据我司账号模块的设计,提供思路,仅供参考。
该设计的思路是每个手机号对应一个用户,手机号为必填项。
流程:
Redis
中,并设置一定的过期时间(过期时间一般是5分钟,这就是我们一般手机验证码的有效期),最后将验证码通过短信发送给用户。Redis
里面这个手机号对应的验证码是否一致,,失败就返回错误码,成功就给用户创建一个账号和保存密码。手机号+密码
进行登陆。问题:
该方案的思路是弱化密码的必填性,即无论用户是否注册过,可通过
手机号 + 验证码
直接进行登陆(保留手机号 + 密码
登录的方式)。
流程:
Redis
中,并设置一定的过期时间(过期时间一般是5分钟,这就是我们一般手机验证码的有效期),最后将验证码通过短信发送给用户。Redis
里面这个手机号对应的验证码是否一致,失败就返回错误码,成功就直接登录。如果是老用户,直接拉取用户信息;如果是新用户,则提示他可以完善用户信息(不强制)。手机号 + 验证码
登录后,也可选择设置密码,然后就可以通过手机号 + 密码
的方式登录,即:密码是非必填项。用户表设计:
id | user_name | user_password | user_mobile | state | more |
---|---|---|---|---|---|
用户id | 用户名 | 用户密码 | 手机号码 | 账号状态 | 其他信息 |
进入 Web2.0
时代 ,微博开放了第三方网站登录, 产品说, 这个我们得要, 加个用微博帐号就能登录我们的App
吧,而且得和我们自己的用户表关联。
流程:
access_token
,通过access_token
调取API
接口获取用户信息。微博用户信息表设计:
id | user_id | uid | access_token |
---|---|---|---|
主键id | 用户id | 微博唯一id | 授权码 |
紧接着, QQ又开放用户登录了, 微信开放用户登录了,网易开发用户登录了。。。。。。一下子要接入好多家第三方登录了, 只能按照 “微博用户信息表” 新建一个表,重写一套各个第三方登录。
手机号 + 密码
, 还是 手机号 + 验证码
, 都是一种 用户信息+密码
的验证形式;用户信息+密码
的形式, 用户信息即第三方系统中的 ID
(第三方系统中的唯一标识), 密码即 access_token
, 只不过是一种有使用时效定期修改的密码。用户基础信息表:
id | nickname | avatar | more |
---|---|---|---|
用户id | 昵称 | 头像 | 其他信息 |
用户授权信息表:
id | user_id | identity_type | identifier | credential |
---|---|---|---|---|
主键id | 用户id | 登录类型(手机号/邮箱) 或第三方应用名称 (微信/微博等) | 手机号/邮箱/第三方的唯一标识 | 密码凭证 (自建账号的保存密码, 第三方的保存 token) |
说明:
用户基础信息表
+ 用户授权信息表
;手机号 + 验证码
沿用之前的方案。
邮箱/手机号 + 密码
:用户填写 邮箱/手机号 + 密码
; 请求登录的时候, 先判断类型, 如手机号登录为例:
使用 type= ‘phone‘
结合 identifier= ‘手机号‘
查找, 如有, 取出并判断 password_hash
(密码)是否和该条目的 credential
相符, 相符则通过验证, 随后通过 user_id
获取用户信息;
查询type= ‘weixin‘
结合 identifier= ‘微信 openId‘
, 如果有记录, 则直接登录成功, 并更新token
; 假设与微信服务器通信不被劫持的情况下无需判断凭证问题。
优点:
phone_verified
和 email_verified
, 如今只要在用户授权信息表中增加一个统一的 verified
字段, 每种登录方式都可以直观看到是否已验证情况;IP
地址, 就可以更加完整地跟踪用户的使用习惯, 比如:已经不使用微博登录两年多, 已经绑定微信 300天;缺点 :
邮箱 + 新密码
, 手机号 + 旧密码
都可以登录, 肯定是很诡异的情况;回顾一下手机号 + 验证码
的登录方式:
但回过头来想一下,为什么我们需要验证码?验证码的作用就是确定这个手机号是你的,那除了使用短信,是否还有别的方式对手机号进行认证?
SIM
卡数据查询到。这就是该部分的主角:一键登录。
获取到当前手机使用的手机卡号,直接使用这个号码进行登录,这就是一键登录。
这种登录方式的好处是显而易见的。它可以更方便、快捷地完成注册、登录流程,将原本可能需要 20 秒的流程,缩短到了 2 秒左右,很大程度上提升了登录的用户体验。
主要步骤如下:
目前阿里云已经提供了该方式并可兼容三大运营商的号码,详见阿里云SDK
博主看来,没有最好的方案,选择适用当前系统的设计即可。不要深究孰优孰劣,鞋合不合脚,只有脚知道。
原文:https://www.cnblogs.com/souphm/p/11428120.html