如何设计优雅的第三方账号登录?
发布日期:2021-06-27 12:55:09 浏览次数:26 分类:技术文章

本文共 2141 字,大约阅读时间需要 7 分钟。

如何设计优雅的第三方账号登录?

一、前言

在互联网应用中,我们构建一个网站或APP,如果没有用户,那就没有价值。所以,如何吸引用户注册和登录,是一个重要问题,而这就涉及到账号体系了。

在这里插入图片描述
在应用构建初期,用户量较少,那么自建系统的账号体系就可以满足本身系统的业务需求。当应用用户量较多时(比如QQ、微信等用户量较多的应用),可提供第三方授权登录系统,为其他应用提供登录功能需求。常用登录如下:
在这里插入图片描述

二、常用登录设计

1、用户/密码注册登录

其实很多最初构建的应用系统都是采用这种方式,用户先注册,再登录,才可操作相应业务。其流程图如下:

用户注册:
在这里插入图片描述
流程说明:

  • 前端将用户名/密码发送到服务器,服务器进行常规的判断,判断用户名、密码长度、字符是否满足要求、用户是否已经存在等条件,当条件不满足时候,将对应错误码返回给前端。
  • 此刻的密码需要进行相应的加密,默认是md5加密,从而防止传输过程中数据被拦截,从而被盗号。
  • 数据校验成功后,便将数据写入数据库。

用户登录:

在这里插入图片描述
流程说明:

  • 用户登录,前端将用户名/密码发送到服务器端,服务器端首先校验登录次数是否超过设置的阀值,如果超过便等待一段时间(系统设置的过期时间)
  • 如果未超过登录次数阀值,便判断用户名/密码是否正确,如果不正确便增加登录失败次数,如果此时失败次数超过了阀值,便进入等待阶段,系统自动锁定一段时间(如上)。
  • 登录成功后才可操作相应的业务。

2、手机号注册登录

随着智能移动设备的普及,以及短信业务的成熟,现在很多应用都逐渐采用手机号注册登录这种方式来作为应用的登录需求。手机号注册登录这种方式省略常规的注册,通过验证码来进行注册登录,当用户进入应用后进行一个信息补录,完善用户信息即可。在如今信息时代,密码也就变得不那么重要了,手机号-验证码这种方式让用户能轻便的快速使用应用,不用去记太多的密码。其流程图如下:

在这里插入图片描述
流程说明:

  • 用户输入手机号,然后发送到服务端,服务端将手机号记录在我们数据库中,然后生成随机验证码,并将手机号和验证码绑定到一个redis里面,然后记录过期时间,通常过期时间一般是10分钟左右,这就是我们一般手机验证码的有效期。
  • 手机收到短信后,填写验证码发送到服务器端,服务器端通过查询Redis中的发送手机对于的验证码,比对两者,失败返回对于错误码。
  • 成功后可操作后续业务。

数据库表设计(根据业务进行修改):

auto_id userName passWord telephone err_num
1 user1 8js3d4w 13847387443 2
2 user2 2h1d68f 19827372347 0

三、第三方登录设计

在开发微信小程序时,微信其实就是第三方,小程序的登录,实际上可以理解为以微信作为第三方进行授权登录,其流程和QQ、微博登录的流程几乎一致。时序图如下:

在这里插入图片描述
实现思路:

  • 客户端调用 wx.login() 获取 临时登录凭证code ,并通过 wx.request()回传到开发者服务器。
  • 使用 appid+appsecret+code 做参数,调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key,并返回与OpenID 和 session_key关联的自定义的登录态。客户端将自定义登录态存入 storage。
  • 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
  • 客户端再登录时,通过查询本地 storage 是否存在自定义登录态,存在则调用 wx.request() 携带自定义登录态,通过自定义登录态去查询 openid 和 Session_key ,从而返回业务数据。

数据库表设计

用户表(users Table):

字段 备注
user_id 用户id
token 用户登录的token
expire_in token过期时间
try_times 登录失败次数

用户验证关联表(user_auth_rel Table):

字段 备注
id 自增id
user_id 用户id
auth_id 验证表id
auth_type 验证类型(local、third)

本地用户表(user_local_auth Table):

字段 备注
auth_id 认证id(自增id)
user_name 用户key
password 密码
mobile 用户手机号

第三方用户表(user_third_auth Table):

字段 备注
auth_id 用户id
openid 第三方用户唯一标识
login_type 第三方平台标识(wechat、QQ等)
access_token 第三方获取的access_token(校验使用)

补充说明

  • users 表只针对登录业务
  • user_local_auth 用于存储用户名/密码、手机号登录记录
  • user_third_auth 用户第三方用户体系的数据记录
  • user_auth_rel 是用来关联 users 、user_local_auth、user_third_auth
  • 采用自建用户与第三方登录数据分开存储

转载地址:https://blog.csdn.net/weixin_43452424/article/details/108973119 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:分布式系统,你知道多少?
下一篇:面试官常问的30个SpringMVC题【附带答案】

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月27日 20时59分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章