从需求出发:对登录和注册功能的思考 | 青训营笔记

152 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。

我在本次青训营中参与的组队大项目是极简版抖音的服务端实现。本篇笔记将主要记录从实际需求出发对服务端中登录/注册功能的一些思考。

对于一个相对完整的程序而言,一般都会设置用户这一概念,而一旦涉及到用户,自然也就离不开要识别用户的身份,那也就是我们传统意义上讲的”登录“功能。那用户身份如何产生呢?这就用到了”注册“功能。可以说,登录和注册这两个功能是整个应用程序的入口,它的实现直接控制了用户能不能顺利进入应用使用真正的业务功能。

一个友好的验证方式,可以让用户使用应用的意愿更强。本系统由于客户端实现的限制,仅采取借助用户名/密码的方式进行用户身份合法性的校验。实际上登录验证的方式还有很多种,比如双因子认证(2FA)。

用户身份合法性校验的另外一个目的就是为了保证系统的安全,让非系统的使用者不能正常进入应用使用业务功能,将其挡在应用最外层,防止对系统造成破坏。

在客户端已有一些简单的校验机制(比如限制用户名、密码长度不能过短),但这其实无法满足系统的安全需要。为了防止非法用户直接对接口发起恶意请求,需要在服务端也对参数进行完整的校验。此处的校验可以分为静态校验动态校验。静态校验指的是不需要借助底层DB即可完成的校验,包括但不限于判断用户名/密码是否为空、使用正则表达式判断用户名/密码是否包括指定类型字符及长度是否符合要求;动态校验指的是从底层DB(不一定是MySQL等关系型数据库)中获取数据,并利用数据对比进行校验的校验方式。通过客户端优先校验、服务端分级校验,可以将部分校验压力转移到client侧,减轻服务端压力,提高并发性能。