j

jaryue

V1

2023/04/17阅读:22主题:默认主题

项目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
data string

图片验证功能模块

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

MySQL表

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

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

  1. OperationRecord(操作列表)
名称 数据类型
id int
操作 string
time string
  1. VerificationCode(验证码储存库)
名称 数据类型
Email string
Verification int
ExpirationTime int
time int

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)注册:

注册表单:

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

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

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

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

sign up(登录)

index/signup

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

账号密码登录表单:

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

验证码登录表单:

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

home页面

/home

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

sign out(登出)

home/signout

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

reset password(重置密码)

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

1. 旧密码密码改密

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

旧密码改密表单:

名称 数据类型
password string
new password string
new password again string

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

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

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

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

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

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

2. 验证码改密

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

验证码改密表单:

名称 数据类型
验证码 int

(2). 点击发送验证码

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

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

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

验证通过:

名称 数据类型
new password string
new password again string

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

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

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

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

查询操作记录

  1. 调用储存操作信息功能模块

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

分类:

后端

标签:

后端

作者介绍

j
jaryue
V1