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

news2025/1/20 3:40:24

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

需求

实现一个登录功能

实现的功能

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

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

优化点:

  1. VerificationCode(验证码储存库):
    增加时间字段ExpirationTime数据类型int用于储存验证码的过期时间,增加次数字段time用于储存验证的次数,用于判断用户是否在发送验证码之后进行验证

  2. SignInList(登录列表)

增加ExpirationTime储存过期时间,如果用户发送请求的时间超过过期时间,则视为用户掉线,需要重新登陆.

  1. 采用图片验证:
    由于滑动验证过于复杂,我们采用图片验证码的形式进行真人验证

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. 核验邮箱格式正确且未使用
  3. 弹出真人验证:图片验证
  4. 生成验证码(随机6位数),与Email一起存入VerificationCode(验证码储存库),同时储存验证码过期时间,次数为默认值0
  5. 向用户邮箱发送验证码
  6. 服务端使用用户的提交验证码时的Email去VerificationCode(验证码储存库)获取最后一条匹配的数据(最新生成的验证码数据)的过期时间,和验证码值,如果现在的时间大于过期时间,返回验证码过期,如果小于过期时间,对比传入的数据与数据库中验证码的值Verification(验证码值)是否相同,.
  7. 处理用户请求
  8. 每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. 查找LoginList(注册列表)中对应的邮箱/账号(如果没有返回账号/邮箱未注册)
  5. 核验密码是否正确
  6. 处理用户请求

储存操作信息功能

  1. 通过请求数据的id与方法确定请求操作的种类,将post操作的内容与id和请求时间一起储存在OperationRecord(操作列表)中

实现方案

index页面

/index

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

login(注册)

index/login (1).邮箱验证

  1. 填写邮箱点击发送
  2. 调用邮箱验证功能模块

(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. 生成身份码(随机字符串),与id一起储存在SignInList(登录列表)中,过期时间为当前时间加30分钟,(每次操作后刷新过期时间都是当前时间+30分钟)
  3. 返回用户身份码与id(每次访问都会自动带上)
  4. 进入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). 检验newpassword格式是否正确

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

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

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

alt

查询操作记录

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

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

本文由 mdnice 多平台发布

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

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

相关文章

LAMP框架的架构与环境配置

1.LAMP架构的相关知识 1.1 LAMP架构的概述 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQ…

追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构

详解小白如何使用C语言实现堆数据结构 “痛”撕堆排序~😎前言🙌什么是堆?堆的概念及结构堆的性质:堆的实现堆向下调整算法画图分析:堆向下调整算法源代码分享:向下调整建小堆向下调整建大堆堆向上调整算法…

矩阵求逆_高斯消元法

高斯消元法流程 首先必须要判断矩阵是不是一个方阵,其方法是对于一个矩阵AnnA_{n \times n}Ann​,先构造一个增广矩阵W[A∣E]W[A \mid E]W[A∣E],其中EEE是一个nnn \times nnn的单位矩阵,这样WWW就成了一个n2nn \times 2nn2n的矩…

说说你对Event Loop(事件循环)的理解?

目录标题一、是什么二、事件循环三、宏任务和微任务微任务宏任务四、async与awaitasyncawait一、是什么 Javascript在设计之初便是单线程,即指程序运行时,只要一个线程存在,同一时间只能做一件事。 为了解决单线程运行阻塞问题,J…

【jvm系列-07】深入理解执行引擎,解释器、JIT即时编译器

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

消息中间件Kafka分布式数据处理平台+ZooKeeper

目录 一.消息队列基本介绍 1.为什么需要消息队列(MQ) 2.使用消息队列的好处 2.1 解耦 2.2 可恢复性 2.3 缓冲 2.4 灵活性 & 峰值处理能力 2.5 异步通信 3.消息队列的两种模式 3.1 点对点模式 3.2 发布/订阅模式 二.Kafka基本介绍 1.Kaf…

【http】 get方法和Post方法区别;http和https

get方法和Post方法 get方法:通过url传参,回显输入的私密信息,不够私密 Post方法:通过正文传参,不会回显,一般私密性有保证。 一般如果上传的图片,音频比较大,推荐Post方法&#x…

Android中的AsyncTask

近期写了一个项目,在前台刷新界面的时候需要操作数据库,进行数据操作,在UI线程更新数据会导致ANR,程序十分卡,因此用了AsyncTask进行后台数据处理。 介绍 AsyncTask是一个用于在后台线程执行异步任务并在主线程更新U…

springboot+vue论坛管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的论坛管理系统。项目源码请联系风歌,文末附上联系信息 。 目前有各类成品java毕设,需要请看文末联系方式 。ja…

1.分布式电源接入对配电网影响分析

说明书 相关代码资源地址:风、光、负荷场景生成;风电出力各场景及概率;光伏出力各场景及概率;负荷各场景及概率;场景的削减;样本概率初始化;样本削减 基于多目标算法的冷热电联供型综合能源系…

Android 自定义View 之 圆环进度条

圆环进度条前言正文一、XML样式二、构造方法三、测量四、绘制① 绘制进度条背景② 绘制进度③ 绘制文字五、API方法六、使用七、源码前言 很多时候我们会使用进度条,而Android默认的进度条是长条的,从左至右。而在日常开发中,有时候UI为了让页…

亚马逊云科技为游戏全生命周期提供保障,降低游戏整体运营成本

开发一个“爆款”游戏总共需要几步?Marvel Snap可能会告诉你:第一步,专心致志把游戏做好、提高可玩性;第二步,把其他工作交给亚马逊云科技。 相关数据显示,自2022年10月18日正式发行以来,在不…

L2-044 大众情人分数 25分

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比,并且距离感是单向的。例如小蓝对小红患了单相思,从小蓝的眼中看去,他和小红之间的距离为 1,只差一层窗户纸;但在小红的眼里&#xf…

【Hello Linux】信号量

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍linux中信号量的概念 信号量信号量的概念信号量的使用信号量函数二元信号量模拟互斥功能基于环形队列的生产者消费者模型空间资…

CSS快速入门-选择器和优先级

文章目录CSS简介选择器CSS样式优先级CSS简介 CSS是一种用于样式化网页的语言,全称为“层叠样式表”(Cascading Style Sheets)。 它可以控制网页中元素的外观和布局,例如颜色、字体、大小、边距、对齐等,让网页变得更…

消费回暖:别总想着“报复”,而该想想怎么“修复”

01 是报复性消费吗?「报复性消费」一词最早是在2020年武汉疫情解封之后被大家熟知。之后的三年里,各路机构总是预测“等到常态化防疫结束之后,必将迎来真正的报复性消费”,事实果真如此吗?A面:涨自去年年底…

健康体检管理系统源码 PEIS源码 体检小结自动生成

健康体检管理系统源码 PEIS源码 数据对接 体检小结自动生成,商业源码,有演示,文档齐全。自主知识产权。 文末获取联系! 一套专业的体检管理系统源码,该系统涵盖个人体检、团队体检、关爱体检等多种体检类型&#xf…

Learning Tone Curves for Local Image Enhancement

作者 LUXI ZHAO , ABDELRAHMAN ABDELHAMED , AND MICHAEL S. BROWN 论文比较清晰易懂。 就是图像分8∗8648*8648∗864个patch, 卷积网络为RGB三个通道预测 3∗643*643∗64 个 look up table, 就是每个patch 3个1D lut. 然后每个patch的中心直接用1D lut&#xf…

spring boot对敏感信息进行加解密

我们使用jasypt最新版本对敏感信息进行加解密。 1.在项目pom文件中加入如下依赖&#xff1a; <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version…

多维时序 | MATLAB实现CNN-GRU-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-GRU-Attention多变量时间序列预测 目录多维时序 | MATLAB实现CNN-GRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-GRU-Attention多变量时间序列预测&#xff0c;CNN-GRU-Attention结合注意…