注册登录设计思路以及一些注意点

注册登录设计

功能点:注册(手机号、邮箱、身份证、社保卡...)、登录(账号登录、手机登录...)、修改密码(通过旧密码验证)、重置密码(通过邮箱验证、通过手机验证)、注销(注销当前登录)、注销(将账号注销,删除账号)、记住账号(免登录)、第三方账号登录注册(微信、QQ、谷歌账号...)

流程设计

账号注册主流程
手机号注册流程:
邮箱注册流程:

手机注册和邮箱注册需要分开处理。

需要着重考虑的点:校验提示处理、密码加解密处理、验证码不能直接返回前端,需要在后端做存储校验、密码强度/邮箱/手机号等校验需要前后端都做。

做短信验证码、邮箱验证码处理时,注意第三方的接口调用限制。提供接口时,做好发送条数限制(某个时间段发送不能超过N条)的处理。

邮箱/短信发送信息,需要提供可配置功能,最好接入2-3个第三方短信/邮箱平台。避免某个平台故障时,影响业务的正常运行。

密码加密需要使用不可逆加密,登录验证时将前端传递的密码进行加密后,与存储的加密密码进行比对。

登录主流程
简单登录(不保存登录状态)

登录时,直接校验登录信息,然后返回登录状态。

缺点:每次访问资源都需要登录

session登录

登录时,将生成的session信息、用户信息存储到cookie信息中返回给前端。后续前端请求时,自动带上cookie信息,通过校验请求里带的session信息、用户信息,判断该用户是否需要重新登录。

注意session、cookie管理。

使用cookie时,注意信息加密,还需要注意使用HttpOnly属性,防止前端篡改信息。

缺点:

1.在集群部署下,不同服务器之间的session信息不共享,需要考虑session同步或者负载均衡配置时将一个用户的请求转发到同一个服务器。

2.session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大.

  1. cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

token登录

1、客户端使用用户名和密码请求登录

2、服务端收到请求,验证用户名和密码

3、验证成功后,服务端会签发一个token,再把这个token返回给客户端

4、客户端收到token后可以把它存储起来,比如放到cookie中

5、客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带

6、服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据

优点:

支持跨域访问:cookie是无法跨域的,而token由于没有用到cookie(前提是将token放到请求头中),所以跨域后不会存在信息丢失问题

无状态:token机制在服务端不需要存储session信息,因为token自身包含了所有登录用户的信息,所以可以减轻服务端压力

更适用CDN:可以通过内容分发网络请求服务端的所有资料

更适用于移动端:当客户端是非浏览器平台时,cookie是不被支持的,此时采用token认证方式会简单很多

无需考虑CSRF:由于不再依赖cookie,所以采用token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御

注:因为token认证是无状态的,只能自动失效,所以像注销操作,无法从后端注销,如果需要从后端完成注销,则需要将token信息进行存储,在注销时对缓存信息进行处理。一般选择存储在redis中,建议使用黑名单方法,即注销后放入黑名单,一段时间后自动过期。这样可以不用每次都往redis里存。

token生成方案建议采用jwt。

修改/忘记密码主流程
注销

注销时,注意相应session信息、token信息的处理。

其他注意点:

流程中校验提示信息最好提前设计好,像注册时提示“账号已存在”、登录时提示“密码错误”/"账号错误",这种信息可能会被用做撞库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值