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

news2024/9/23 23:34:11

  • 需求
    • 优化点:
  • MySQL表
  • 常用功能模块
  • 实现方案
    • index页面
    • home页面

需求

实现一个登录功能

实现的功能

  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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同

近日,为规范旅游市场秩序,促进旅行社高质量发展,文旅部发布了《文化和旅游部办公厅关于进一步规范旅游市场秩序的通知》(下称《通知》),对旅游业提出了新的要求。 《通知》中规范了旅行社经营行为。旅行社要…

flink任务处理下线流水数据,数据遗漏不全(三)

flink任务处理下线流水数据,数据遗漏不全(二) 居然还是重量,做一个判断,如果是NaN 就直接获取原始的数据的重量 测试后面会不会出现这个情况! 发现chunjun的代码运行不到5h以后,如果网络不稳…

EasyCVR平台基于GB28181协议的语音对讲配置操作

EasyCVR基于云边端协同,具有强大的数据接入、处理及分发能力,平台可支持海量视频的轻量化接入与汇聚管理,可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等功能…

IT行业里的热门技术

© Ptw-cwl 文章目录 1. 人工智能(AI)和机器学习(ML)2. 大数据3. Web2.04. 移动应用程序开发5. 物联网6. 云计算7. 区块链8. 5G技术9. 虚拟现实(VR)和增强现实(AR) 现在如果问…

如何使用Midjourney辅助建筑设计,常用的提示和使用效果展示(内附Midjourney提示词网站)

文章目录 一.Midjourney建筑设计的提示技巧1. prompt模板12.prompt模板2 二、著名建筑师为例1.Zaha Hadid(扎哈哈迪德)2.Ludwig Mies van der Rohe(路德维希密斯凡德罗)3.Renzo Piano(皮亚诺)4.Stefano Boe…

PEIS源码,体检管理系统源码,C#医院体检系统源码

PEIS体检管理系统源码,医院体检系统源码PEIS源码,商业级源码,有演示。 PEIS医院体检管理系统采用C/S结构,前台开发工具为Vs2012,后台数据库采用oracle大型数据库。核心功能有:体检档案的录入、体检报告的输…

从入门到精通:SEO站外优化全面解析

通过​​第三章​​上下连续两期的干货内容,相信你已经掌握了 SEO 优化的基本方法,但你有没有发现:之前的内容都是针对网站本身进行优化的方法,其实,SEO 还有相当一部分功夫要放在站外优化上。 问题来了:站…

上海震坤行工业超市聚焦量具量仪市场,助力企业实现测量数字化

上海震坤行工业超市聚焦量具量仪市场,助力企业实现测量数字化 近日,量具量仪三大品牌哈量、广陆、英示的三位重磅嘉宾及震坤行磨具量具产线总经理,走进震坤行工业超市直播间。带来了一场“聚焦量具量仪市场,助力企业实现测量数字…

C语言中结构体(struct)的详细分解与使用

目录 第一:结构体的定义 第二:规则 第三:结构体声明 第四:C 语言结构体定义的三种方式 第五:对于结构体变量的初始化 第六:整体与分开 第七:结构体长度 第八:嵌入式开发中&am…

第 三 章 UML 类图

文章目录 前言一、依赖关系(虚线箭头)二、泛化关系:继承(实线空心箭头)三、实现关系(虚线空心箭头)四、关联关系(一对一为实线箭头,一对多为实线)五、聚合关系…

如何实现24小时客户服务

许多企业都有着这样的愿望:在不增加客服人员的同时能实现24小时客户服务。 那么有没有什么方法可以实现这一想法呢?在想解决方案之前我们可以先来谈谈客服的作用。 客服的作用主要为以下2点: 帮助用户更快地了解产品(减轻产品的…

Linux常用基础指令大全

在使用Aistudio平台学习PaddlePaddle时,常常会用到linux指令,对于之前没有学习过linux指令的我来说,确实有点难度,在学习了一段时间之后,慢慢也适应了linux指令,这一篇博客主要记录linux中的常用指令。以AI…

typescipt的运行环境搭建

1.安装node 官网地址:https://nodejs.org/en 2.安装完成后,运行node -v 检测安装版本 3.全局安装typescipt npm i typescipt -g 用tsc检测是否安装好 创建一个demo.ts文件 在终端运行tsc demo.ts会出现错误 找到windows powershell以管理员身份运行…

算法训练day2:哈希表

哈希表理论基础 哈希表是根据关键码的值而直接进行访问的数据结构。 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据&#…

LeetCode:454. 四数相加 II —— 哈希表为什么叫哈希表~

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 hash是什么,哈希表为什么叫哈希表? 一、🌱454. 四数…

【hello Linux】进程概念(下)

目录 1. 通过系统调用创建进程—fork 1.1 通过fork创建进程: 1.2 如何不退出 vim 直接执行命令呢? 3. fork创建进程的本质 4. 父子进程的分流: 2. 进程状态 3. 信号 3.1 显示全部信号 3.1 停止进程 3.2 继续进程 3.3 杀死进程 后台进程 4. 僵…

在pycharm2020上部署配置AutoGPT4.0,保姆级教程

前期环境及软件准备: 1)pycharm版本2020及以上 2)python版本3.10及以上 3)pip版本20及以上(新一点的版本) 4)安装git,无版本要求 正式开工 具体配置步骤如下: 1.AUTOGP…

【UE 粒子系统】使用GPU渲染粒子

GPU Sprite 是虚幻引擎4中可用的粒子类型之一。这些粒子首先在CPU上生成,但之后完全由显卡处理和计算。这样做的好处是,由于GPU负责处理计算,因此可以同时处理成千上万的粒子,从而实现更密集和更细节化的粒子系统。 在上一篇博客&…

PPC380AE102 HIEE300885R0102现代自动化技术

PPC380AE102 HIEE300885R0102现代自动化技术 ​ 交流伺服电机驱动器示例 目前世界人口已经达到了78亿,并且还在不断增加,预计到2050年将达到100亿。日益增长的人口既有对衣服,食物等基本必需品的需求,对舒适、安全生活的追求也不断…

C++并发数据结构设计

关键词:原子操作,无锁设计 引入问题-> 为什么需要原子操作-> 原子操作实现以及原理-> c原子操作接口-> c基于原子操作的数据结构设计-> 原子操作 什么是原子操作 所谓原子操作,就是"不可中断的一个或一系列操作" 。 2…