文章目录
-
- 需求
- MySQL表
- 实现方案
-
- index页面
-
- login(注册)
- sign up(登录)
- home页面
-
- sign out(登出)
- reset password(重置密码)
-
- 1. **旧密码密码改密**
- 2. **验证码改密**
- 查询操作记录
需求
实现一个登录功能
实现的功能
- 注册(邮箱注册)
- 登录(邮箱+密码)
- 重置密码
- 查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)
- 登出
MySQL表
- LoginList(注册列表)
名称 | 数据类型 |
---|---|
id(主键) | int |
name(唯一) | string |
password | string |
Email(唯一) | string |
- SignInList(登录列表)
名称 | 数据类型 |
---|---|
id (主键) | int |
身份码 | int |
- OperationRecord(操作列表)
名称 | 数据类型 |
---|---|
id | int |
操作 | string |
time | string |
实现方案
index页面
/index
定义一个index页面包含两个按钮login(注册)和sign up(登录)
点击login进入注册页面,点击sign up进入登录页面
login(注册)
index/login
渲染一个表单页面,用户填写好表单数据点击"注册",服务端发送post请求并发送这组表单数据
注册表单:
名称 | 数据类型 |
---|---|
name | string |
password | string |
string | |
验证码 | int |
-
先验证name是否有效与是否被使用(例如:name不能超过10个字符且字符都在ASCII中)
-
验证Email是否有效与是否被使用
-
核验password是否规范(例如:大于6位小于20位)
确认没问题后 -
先将Email发送到服务端,服务端先邮箱地址发送一封验证邮件,其中包含验证码(只能使用一次,五分钟后失效)
-
用户填写完善所有数据,并点击提交,数据发送到服务端,核验 验证码的准确性(核验失败返回验证码错误),核验成功,服务端随机生成一个不重复的int数据作为id(账号)将用户提交的表单信息和id储存到MySQL的LoginList(注册表单)中,(password需要加密储存,以保证信息的安全性)
-
向Email发送一封注册成功邮件,并返回完成注册;
(7)通过id向OperationRecord(操作列表)中储存 “注册” 操作与目前的时间
sign up(登录)
index/signup
- 邮箱密码登录
账号密码登录表单:
名称 | 数据类型 |
---|---|
string | |
password | string |
(1). 用户填写表单信息,点击登录.向服务端发送表单数据,服务端拿到表单数据去MySQL中查找,如果找不到对应的Email返回该邮箱未注册,请先注册,如果password错误返回密码错误,
(2). 核验成功,服务端随机生成一个临时的访问身份码,与id一起储存到MySQL中的SignInList(登录列表)中,再将一份发送给用户,用户拿着此身份码进入home页面
(3)通过id向OperationRecord(操作列表)中储存 “登录” 操作与目前的时间
- 验证码登录
验证码登录表单:
名称 | 数据类型 |
---|---|
string | |
验证码 | int |
(1). 用户填写Email,点击发送验证码,向服务端发送Email数据,服务端拿到数据去MySQL中查找,如果找不到对应的Email返回该邮箱未注册,请先注册,如果存在就向邮箱发送一封验证邮件
(2). 用户填写验证邮件,点击登录,服务器会核验验证码的正确性,核验成功,服务端随机生成一个临时的访问身份码,与id一起储存到MySQL中的SignInList(登录列表)中,再将一份发送给用户,用户拿着此身份码进入home页面
(3)通过id向OperationRecord(操作列表)中储存 “登录” 操作与目前的时间
用户登出或者意外掉线,服务端会删除SignInList(登录列表)中Email对应的数据.
原理图
home页面
/home
- 定义三个按钮 sign out(登出),reset password(重置密码),view(查看操作记录)
sign out(登出)
home/signout
- 通过用户的Email,删除SignInList(登录列表)对应的数据.
- 回到index页面
(3)通过id向OperationRecord(操作列表)中储存 “登出” 操作与目前的时间
reset password(重置密码)
home/resetpassword
两个按钮:旧密码改密|验证码改密
1. 旧密码密码改密
(1). 验证正常登录状态:(核验身份)
检验目前用户的id与身份码信息是否在MySQL中SignInList(登录列表)存在且正确
- 核验身份失败,退回到index页面
旧密码改密表单:
名称 | 数据类型 |
---|---|
password | string |
new password | string |
new password again | string |
(2). 用户填写表单信息,点击提交.向服务端发送表单数据,服务端拿到表单数据核验new password是否规范(例如:大于6位小于20位),
(3). 检验password again密码是否相同
(4). 核验成功,服务端修改MySQL中的 LoginList(注册列表)中对应的id下的password
(5)通过id向OperationRecord(操作列表)中储存 “改密” 操作与目前的时间
2. 验证码改密
(1). 验证正常登录状态:(核验身份)
检验目前用户的id与身份码信息是否在MySQL中SignInList(登录列表)存在且正确
- 核验身份失败,退回到index页面
验证码改密表单:
名称 | 数据类型 |
---|---|
验证码 | int |
(1). 用户点击发送验证码,服务器通过用户的id获取用户的Email信息,向Email发送一封验证邮件
(2). 用户点击提交,服务端核验验证码正确性(核验失败返回验证码错误),核验成功:修改MySQL中的 LoginList(注册列表)中对应的用户的id的password;
(3)通过id向OperationRecord(操作列表)中储存 “改密” 操作与目前的时间
查询操作记录
-
身份核验:
检验目前用户的id与身份码信息是否在MySQL中SignInList(登录列表)存在且正确 -
核验无误,服务端查询OperationRecord(操作列表)中的所有id为用户id的数据,并返回给用户
本文由mdnice多平台发布
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2273859.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
项目1login登录页面方案设计
文章目录需求MySQL表实现方案index页面login(注册)sign up(登录)home页面sign out(登出)reset password(重置密码)1. **旧密码密码改密**2. **验证码改密**查询操作记录需求
实现一个登录功能
实现的功能
注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置……
python中使用socket请求http接口
在python中,一切的网络通信均基于socket,所以对于网络通信的理解应该从socket入手。
socket可以实现和不同的机器通信,从多个案例总结一下就是在请求不同协议的服务时,第一次的入参有一定的要求,我们只要按照约定的写法࿰……
戴尔惠普联想笔记本性价比(戴尔和联想笔记本性价比)
联想。
联想做笔记本时间长,售后、质量都不错,追求稳定,性价比合理,长久使用考虑,不会有太大笔记本毛病。
联想1984就开始进入笔记本电脑行业,由中科院投资,后来收购了IBM之后,笔记……
JavaScript 进阶 – 0基础第一天
JavaScript 进阶 – 第1天 学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 作用域函数进阶解构赋值综合案例
作用域 了解作用域对程序执行的影响及作用域链的查找机制……
【JavaEE】ConcurrentHashMap与Hashtable有什么区别?
博主简介:努力的打工人一枚博主主页:xyk:所属专栏: JavaEE初阶Hashtable、ConcurrentHashMap是使用频率较高的数据结构,它们都是以key-value的形式来存储数据,且都实现了Map接口,日常开发中很多人对其二者之间的区别并……
Twitter-高性能hash_map
学习twitter的高性能散列表源码: 个人认为Twitter散列表的优点: 1、使用C宏定义实现C泛型的思想; 2、散列函数冲突小; 3、使用bitmap思想,标志位占用空间小; 4、自动扩展容量,判断扩容的条件&am……
机械臂动力学参数辨识学习笔记
1、为什么需要动力学参数辨识? 图1 电机三环控制图 通常情况下,标准的工业控制器通过机械臂内部的PID进行调节控制机械臂的运动,即用PID输出力矩,涉及到经典的图一所示的电机三环控制(位置环、速度环、电流环ÿ……
JavaEE初阶学习:文件操作
1.文件
1.认识文件
平时说的文件一般都是指存储再硬盘上的普通文件,形如txt,jpg,MP4,rar等这些文件都可以认为是普通文件,它们都是再硬盘上存储的。
在计算机中,文件可能是一个广义的概念,就……
JavaScript 进阶 – 0基础第四天
JavaScript 进阶 – 第四天
深浅拷贝
浅拷贝
浅拷贝:把对象拷贝给一个新的对象,开发中我们经常需要复制一个对象
如果直接赋值,则复制的是地址,修改任何一个对象,另一个对象都会变化
常见方法:
拷贝对……
vs中的错误集合
记录在vs 中遇到的 各种错误 1:project.vcxproj.filters 文件出现了异常,发现了以前的解决方案下的筛选器竟然没有了 原因:合并svn的时候 .vcxproj.filters 文件出现了 合并错误(检查该文件里面是否有不一样的) 解决办法:解决 该文……
【排序】:冒泡排序以及三种优化
转载:https://blog.csdn.net/hansionz/article/details/80822494…
C++关于临界区CCriticalSection的线程同步 网狐框架示例
转载:https://www.jianshu.com/p/ba253c16cd0b…
递归算法讲解
递归思想本质是数学归纳法,讲所有问题归纳使用同一种解决方案处理,所有的问题化为子问题解决,子问题在转化为子问题解决,最终的子问题是和以上的解决方案不同,最终把这个问题给解决了。
转载自:https://bl……
单向链表初始化以及链表逆序
1、两种初始化的方法
2、逆序排列一个单向链表
//实现节点逆序
#include <stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;typedef struct Node
{int data;struct Node *next ;
}myNode;
Node * reverse(Node * head);
Node * init……
判定一副牌是否是顺子
转载一个不用排序就判定出顺子的算法:https://blog.csdn.net/qq_43968080/article/details/85346468
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;#define MAX_COUNT 20
#define MASK_COLOR 0xF0 ……
几篇讲解lua闭包函数的博文
1:、https://blog.csdn.net/maximuszhou/article/details/44280109
2、https://www.jb51.net/article/55806.htm
3、举例讲解lua闭包函数的实际表现 https://www.jb51.net/article/55806.htm
4、看了这两篇博文基本就明白了闭包函数的用法了。…
cocosstudio的使用注意一(listview上加载一个item(Layout),item上加载checkbox,Text,导致listview“无法滑动”)
今天写代码遇到一个问题listview上加载一个item(Layout),item上加载checkbox,Text;并且设置回弹属性为false,那么死活无法向下滑动,so 我对litview添加监听事件,哦 触发到了,所以,关键点是我只添加了一个item,所有没有……
c++和lua相互调用
转载自:https://www.cnblogs.com/sevenyuan/p/4511808.html…
lua中对于for循环的用法
关于此种写法的 (for <var_list> in <expre_list> do end)
转载自:https://blog.csdn.net/qq_28644183/article/details/71629908…
原 texture packer 处理图片空白的问题
转载至: https://blog.csdn.net/harryptter/article/details/50344219
设置一个属性 trim mode 属性为 none…
编程日记2023/4/16 15:00:56