账号系统登录流程
客户端弹出登录弹窗,如果用户上次登录勾选了“记住我”,则默认给填上000000。
客户端先自行校验各项输入框的值是否符合要求,用正则表达式校验。
如果是客户端,可以在登录后自行维护登录状态;如果是Web前端,使用Access Token或者Session维护登录状态。看具体需求。
Token的生成规则可以是:hash("sha256", user_id + timestamp + salt)
客户端发起登录请求。传参:
- String userId 必传
- String password 如果用户有Token,则前端的密码输入框默认填上000000(自定义的6个字节,反正显示为6个*),不传该参数;没有Token则默认输入框为空,该参数必传。
- String machineCode 如果要做限制多端登录的话就必传机器码。由客户端代码获取并提交,不由用户填写。
- String token 可空,如果客户端存储有就必传。如果用户上次登录时勾选了“记住我”,则服务端返回一个随机Token,客户端保存后以后每次登录都带上Token(服务端判断Token是否过期)。
后端处理流程:
- 先根据userId判断该用户是否存在,不存在则直接返回“该用户不存在”。
- Token不为空且password错误,则返回“密码错误”。
- 如果以上校验通过,再判断该用户是否已验证邮箱(如果需求是已验证了邮箱才能开始用的话),校验失败则返回“请校验邮箱”。
- 如果Token不为空且密码为空,说明用户上次登录时勾选了“记住我”。判断该Token的有效期,未过期则返回“登录成功”,否则返回“登录已过期,请重新登录”。
小结:
- 如果客户端已有Token,则只传递userId和Token;否则传递userId和password。是否需要machineCode看具体业务需求。
- 返回登录失败时,清空密码输入框。如果客户端已有Token,就删除Token。或者也可以用一个标记区别是因为服务端判断Token已过期导致的记住密码登录失败了,客户端再删除Token。