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

一、前言

在互联网应用中,我们构建一个网站或APP,如果没有用户,那就没有价值。所以,如何吸引用户注册和登录,是一个重要问题,而这就涉及到账号体系了。
在这里插入图片描述
在应用构建初期,用户量较少,那么自建系统的账号体系就可以满足本身系统的业务需求。当应用用户量较多时(比如QQ、微信等用户量较多的应用),可提供第三方授权登录系统,为其他应用提供登录功能需求。常用登录如下:
在这里插入图片描述

二、常用登录设计

1、用户/密码注册登录

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

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

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

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

2、手机号注册登录

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

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

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

auto_iduserNamepassWordtelephoneerr_num
1user18js3d4w138473874432
2user22h1d68f198273723470

三、第三方登录设计

在开发微信小程序时,微信其实就是第三方,小程序的登录,实际上可以理解为以微信作为第三方进行授权登录,其流程和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_intoken过期时间
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
  • 采用自建用户与第三方登录数据分开存储
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值