项目1实现登录功能方案设计第四版

需求

实现一个登录功能

实现的功能

  1. 注册(邮箱注册)
  2. 登录(邮箱+密码)
  3. 重置密码
  4. 查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)
  5. 登出

在第3版的基础上进行优化:\

优化点:

  1. 接口设计
1. 发送注册验证码:

路径: POST-/index/login/sendverification

参数 :数据格式json

 Email string(邮箱;长度限制20以内的字符串)
 picdata:图片验证码(字符串4位)

返回:数据格式json

{
{
Email 注册邮箱 (string)
}
msg 请求成功信息(ok/err:)
}
2. 填写验证码

POST-/index/login/putverification

参数:数据格式json

{
Email 注册邮箱(getverification返回值,不为用户输入)
验证码 int(4位随机数)
}

返回:数据格式json

{
{
Email: 注册邮箱(string)
id :生成账号(int)
}
msg :请求成功信息(ok/err:字符串)
}
3. 注册账号

路径: POST-/index/login

参数:

{
Email :注册邮箱(getverification返回值,不为用户输入)
id :注册账号(getverification返回值,不为用户输入)
name: 名字(长度为10以内的字符串,用户输入)
password :密码(长度20以内的字符串,用户输入)
}

返回:数据格式json

{
msg 请求成功信息(ok/err:)
}

4. 密码登录

路径: POST-/index/signupbykey

参数:数据格式json

Email :登录邮箱(string长度限制20以内的字符串)
password:登陆密码(长度限制20以内的字符串)
picdata:图片验证码(字符串4位)

返回:数据格式json

{
{
id :账号(int)
idcode:身份码(string)
}
msg :请求成功信息(ok/err:字符串)
}
5. 发送登录验证码

路径: POST-/index/signup/sendverification

参数:数据格式json

Email 邮箱
picdata:图片验证码(字符串4位)

返回:数据格式json

{
{
Email:发送验证码邮箱 (string)
}
msg :请求成功信息(ok/err:)
}

6. 填写登录验证码

POST-/index/signup

参数:数据格式json

{
Email 登录邮箱(getverification返回值,不为用户输入)
验证码 int(4位随机数)
}

返回:数据格式json

{
{
id :账号(int)
idcode:身份码(string)
}
msg :请求成功信息(ok/err:字符串)
}
7. 登出

POST-/home/signout

参数:数据格式json

{
id :账号(int)
idcode:身份码(string)
}

返回:数据格式json

{
msg :请求成功信息(ok/err:字符串)
}
8. 查询操作信息

POST-/home/view

参数:数据格式json

{
id :账号(int自带,非用户输入)
idcode:身份码(string自带,非用户输入)
}

返回:数据格式json

{
[]{
id :账号(int)
behave:操作信息
time:操作时间
}
msg :请求成功信息(ok/err:字符串)
}
2. 验证码改密

POST-/index/login/putverification

参数:数据格式json

{
id :账号(int自带,非用户输入)
idcode:身份码(string自带,非用户输入)
picdata :图片验证码(string 4位字符串)
验证码 int(4位随机数)
}

返回:数据格式json

{
msg :请求成功信息(ok/err:字符串)
}
2. 密码改密

POST-/index/login/putverification

参数:数据格式json

{
id :账号(int自带,非用户输入)
idcode:身份码(string自带,非用户输入)
password:旧密码,长度限制20以内的字符串
newpassword:新密码,长度限制20以内的字符串
again:再次确认新密码, 长度限制20以内的字符串
}

返回:数据格式json

{
msg :请求成功信息(ok/err:字符串)
}
  1. 图片验证功能模块 新建MySQL表
    picdata(图片验证表)
名称数据类型
piclink(唯一)int
datastring

图片验证功能模块

  1. 当调用图片验证功能模块时,服务端将随机一个图片链接piclink发送给前端,前端将图片渲染给用户,
  2. 用户填写验证码提交给服务端,将携带刚刚的图片链接
  3. 后端查找MySQL库中对应的连接的data(验证码)与用户传入的验证码是否相同
  4. 相同则继续用户的操作
  5. 不同返回验证码错误

MySQL表

  1. LoginList(注册列表)
名称数据类型
id(主键)int
name(唯一)string
passwordstring
Email(唯一)string
  1. SignInList(登录列表)
名称数据类型
id (主键)int
身份码string
ExpirationTimeint

解释:身份码为随机字符串,用于对用户操作是进行身份验证,ExpirationTime储存过期时间,如果用户发送请求的时间超过过期时间,则视为用户掉线,需要重新登陆.

  1. OperationRecord(操作列表)
名称数据类型
idint
操作string
timestring
  1. VerificationCode(验证码储存库)
名称数据类型
Emailstring
Verificationint
ExpirationTimeint
timeint

ExpirationTime储存验证码过期时间,如果用户验证时间超过ExpirationTime则验证无效

每次只查询最后一条匹配的数据(最新生成的验证码数据)

常用功能模块

1. 邮箱验证码功能
  1. 用户传入邮箱信息
  2. 生成验证码(随机6位数),与Email一起存入VerificationCode(验证码储存库),同时储存验证码过期时间,次数为默认值0
  3. 向用户邮箱发送验证码
  4. 服务端使用用户的提交验证码时的Email去VerificationCode(验证码储存库)获取最后一条匹配的数据(最新生成的验证码数据)的过期时间,和验证码值,如果现在的时间大于过期时间,返回验证码过期,如果小于过期时间,对比传入的数据与数据库中验证码的值Verification(验证码值)是否相同,.
  5. 处理用户请求
  6. 每30分钟扫描一次数据库,删除超过30的数据

特殊情况:
9. 重新提交:如果验证码生成后,该用户未进行任何验证(time=0),则生成相同的验证码,并告知用户,如果之前有验证失败(time>0),就生成不同的验证码.避免某些用户在5分钟内没法收到验证码的情况.

身份验证功能:

为确保用户的身份与登录状态,我们使用身份验证功能来实现

  1. 用户请求(自带身份码(随机字符串)与id)
  2. 使用id查找SignInList(登录列表)的对应信息(如果没有,返回未登录并退回登录页面)
  3. 检查身份码与过期时间(如果身份码不正确或者已过期,返回登录过期并退回登录页面)
  4. 核验成功重置过期时间(从核验成功开始30分钟后)
  5. 处理用户的请求
  6. 每30分钟扫描一次数据库,删除超过30的数据
密码验证功能
  1. 用户上传邮箱/账号(id)+密码
  2. 真人验证:图片验证
  3. 核验密码是否规范
  4. 密码加密
  5. 查找LoginList(注册列表)中对应的邮箱/账号(如果没有返回账号/邮箱未注册)
  6. 核验密码是否正确
  7. 处理用户请求
储存操作信息功能
  1. 通过请求数据的id与方法确定请求操作的种类,将post操作的内容与id和请求时间一起储存在OperationRecord(操作列表)中

实现方案

index页面

/index

定义一个index页面包含两个按钮login(注册)和sign up(登录) 点击login进入注册页面,点击sign up进入登录页面

login(注册)

index/login (1).邮箱验证

  1. 填写邮箱点击发送
  2. 弹出真人验证:图片验证
  3. 核验邮箱格式正确且未使用
  4. 调用邮箱验证功能模块

(2)注册:

注册表单:

名称数据类型
namestring
passwordstring
  1. 先验证name是否有效与是否被使用(例如:name不能超过10个字符且字符都在ASCII中)

  2. 核验password是否规范(例如:大于6位小于20位) 确认没问题后

  3. 将用户数据(注册的Email,name,password)储存到LoginList(注册列表),并自增出一个新的ID

(4)调用储存操作信息功能模块

alt
sign up(登录)

index/signup

  1. 邮箱/账号+密码登录

账号密码登录表单:

名称数据类型
Email/idstring /int
passwordstring
  1. 调用密码验证功能模块
  2. 生成身份码(随机字符串),与id一起储存在SignInList(登录列表)中,过期时间为当前时间加30分钟,(每次操作后刷新过期时间都是当前时间+30分钟)
  3. 返回用户身份码与id(每次访问都会自动带上)
  4. 进入home页面 (5). 调用储存操作信息功能模块
alt
  1. 验证码登录

验证码登录表单:

名称数据类型
Emailstring
验证码int
  1. 点击发送验证码
  2. 弹出真人验证:图片验证
  3. 核验邮箱格式正确,且已注册
  4. 调用 邮箱验证码功能模块
  5. 生成身份码(随机字符串),与id一起储存在SignInList(登录列表)中,过期时间为当前时间加30分钟,(每次操作后刷新过期时间都是当前时间+30分钟)
  6. 返回用户身份码与id(每次访问都会自动带上)
  7. 进入home页面 (5). 调用储存操作信息功能模块
alt

home页面

/home

  • 定义三个按钮 sign out(登出),reset password(重置密码),view(查看操作记录)
sign out(登出)

home/signout

  1. 调用身份验证功能模块
  2. 通过用户的Email,删除SignInList(登录列表)对应的数据.
  3. 回到index页面 (4) 调用储存操作信息功能模块
alt
reset password(重置密码)

home/resetpassword 两个按钮:旧密码改密|验证码改密

1. 旧密码密码改密

(1).调用身份验证功能模块

旧密码改密表单:

名称数据类型
passwordstring
new passwordstring
new password againstring

(2). 用户填写表单信息,点击提交.

(3). 调用密码验证功能模块

(4). 检验newpassword格式是否正确

(5). 检验password again密码是否相同

(6). 核验成功,服务端修改MySQL中的 LoginList(注册列表)中对应的id下的password

(7). 调用储存操作信息功能模块

alt
2. 验证码改密

(1).调用身份验证功能模块

验证码改密表单:

名称数据类型
验证码int

(2). 点击发送验证码

(3). 弹出真人验证:图片验证

(4). 通过id获取注册表中用户的邮箱

(5). 调用邮箱验证码功能模块

验证通过:

名称数据类型
new passwordstring
new password againstring

(6). 检验newpassword格式是否正确

(7). 检验password again密码是否相同

(8). 核验成功,服务端修改MySQL中的 LoginList(注册列表)中对应的id下的password

(9). 调用储存操作信息功能模块

alt
查询操作记录
  1. 调用储存操作信息功能模块

  2. 服务端查询OperationRecord(操作列表)中的所有id为用户id的数据,并返回给用户

alt

本文由 mdnice 多平台发布

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值