网站的登录注册实现逻辑

该文章主要是为了整理之前学习项目中的知识点,并进行一定程度的理解。

技术列表:

  1. SpringBoot
  2. MySQL
  3. redis
  4. JWT

用户登录逻辑:

首先打开前端登录页面,F12进行网页URL抓取:

随便输入信息,查看请求后端的地址:

地址:

请求 URL: http://localhost:8888/login
请求方法: POST
状态代码: 200
远程地址: [::1]:8888
引用站点策略: strict-origin-when-cross-origin

很明显,前端用户输入账户,通过post请求传递给后端接收:

@RequestMapping("/login")
public class LoginController {
@Autowired
private LoginService loginService;
@PostMapping
public Result login(@RequestBody LoginParam loginParam){
return loginService.login(loginParam);
} }

这里为了方便传输,把前端参数封装成对象传入.

后端验证查询账户的逻辑操作:

  1. 获取账户密码
  2. 判断账户密码是否为空
  3. 密码加密,采用MD5加密+盐的操作
  4. 通过处理的账户密码(加密)进行数据库查询
String pwd = DigestUtils.md5Hex(password + salt);
//根据账号和加密的密码进行数据库的查找
SysUser sysUser = sysUserService.findUser(account, pwd);
  1. 查找成功,使用JWT工具包生成token,保存到redis中

  1. 向前端返回生成的token,检查token,进行登录
{
"code": 200,
"success": true,
"msg": "success",
"data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4OTY1MDIsInVzZXJJZCI6MSwiaWF0IjoxNjM0MDA3NDcwfQ.9elJSiGa-QARLqKGLTeFW9go7ujsArd0QV_HihHfEm0"
}

这里就实现了JWT和redis实现简单的登录验证功能。

用户注册逻辑:

前端请求:

前端传递账户名、密码、昵称,调用http://localhost:8888/register地址进行post传参,后端接收参数

  1. 获取前端参数,判断参数是否合法(是否为空)

  2. 判断账户是否存在,存在,返回账户已经被注册了的json数据

  3. 不存在、注册账户(生成User对象)调用保存接口,保存的时候需要将密码进行MD5+盐 加密

  4. 生成token令牌

    String token = JWTUtils.createToken(sysUser.getId());
  5. 存入redis 并返回

    这里存入redis是因为,注册成功后会跳转到前端页面,前端页面会去redis中找user的信息进行对比,如果存在,显示登录,反之登录失败。

  6. 注意加上事务,一旦中间的任何过程出现问题,注册的用户需要回滚(防止脏数据)

将生成得token传递给前端:

{
"code": 200,
"success": true,
"msg": "success",
"data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4NDc0MzQsInVzZXJJZCI6MTQ0NzU1MjU3MDYzMDQzNDgxNywiaWF0IjoxNjMzOTU4NDAxfQ.zn5meG_lUWROuz7TmkUGS0MTjO1-TDQa42uM_-uhXqs"
}

前端调用该接口,:

http://localhost:8888/users/currentUser

前端将获得token传递给后端接口currentUser,在redis中找到user信息,校验信息,解析数据,返回用户基本信息,前端解析

前端index.js部分代码段:

login({commit}, user) {
return new Promise((resolve, reject) => {
login(user.account, user.password).then(data => {
if(data.success){
commit('SET_TOKEN', data.data)
setToken(data.data)
resolve()
}else{
reject(data.msg)
}
}).catch(error => {
reject(error)
})
})

到这里就是简单的登录注册的功能,上述内容都是部分代码段,如果有需要学习的可以评论留言。

参考文献:

【码神之路】博客开发;

结束:

如果你看到这里或者正好对你有所帮助,希望能点个或者感谢;

有错误的地方,欢迎在评论指出,作者看到会进行修改。

SpringBoot之网站的登陆注册逻辑的更多相关文章

  1. (十四)登陆注册 逻辑二 前端globalData的使用 和 Storage

                        我们在点击登录的时候  成功之后跳转到home 一 在全局的app.js里会有一个 globalData 因为还有其他页面也要使用 共有的数据 所有用到  gl ...

  2. SpringBoot写一个登陆注册功能,和期间走的坑

    文章目录 前言 1. 首先介绍项目的相关技术和工具: 2. 首先创建项目 3. 项目的结构 3.1实体类: 3.2 Mapper.xml 3.3 mapper.inteface 3.4 Service ...

  3. 《java入门第一季》模拟用户登陆注册案例集合版

    需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...

  4. 三篇文章带你极速入门php(三)之php原生实现登陆注册

    看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...

  5. 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)

    本篇紧接着上一篇文章[一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面] 验证码功能 一般验证码功能实现方式为,前端界面访问一个url请求,后端服务代码生成一个图片流返回至浏览器 ...

  6. 任务45:Identity MVC:注册逻辑实现

    任务45:Identity MVC:注册逻辑实现 做登陆 在注册成功直接进行登陆,使用SignIn 这里的signIn实际上是HttpContext.Signin的封装 await _signMana ...

  7. App的登陆注册接口安全设计

    最近一APP产品,我担任的主要模块之一是后台登录注册模块的接口开发.基本完成,就说说并记录一下关于登录注册接口的一些东西,因为也涉及到接口的安全方面的问题. 1.先一般的app的登录注册接口安全设计上 ...

  8. Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)

    Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...

  9. ASP.NET中使用Entity Framework开发登陆注册Demo

    这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 当前步骤是该项目的第一部分 第一部分(当前) 第二部分 大完结版本 直接上步骤,有类似的开发登陆注册也可以参考. 登陆注册的 ...

随机推荐

  1. 学校acm比赛题

    这道题 用位运算必然简单  但是苦逼的是自己不熟练  那就 用本办法 输入一个十进制数  转换成二进制翻转 去掉高位的零 然后再转化为十进制 输出! 1 #include<stdio.h> ...

  2. 常见面试题:java8有什么新特性?

    常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有效减少代码量 Runnable 是一个函数式接口,下面展示了创建线程三种写法,显然最后 ...

  3. docker-harbor私有仓库使用笔记

    1. 登录harbor管理页面,创建项目,比如yuqx_test 2. admin登录,此处免密登录,正常情况下会输入账号密码 [root@k8s-rancher2 ~]# docker login ...

  4. 聚类算法与K-means实现

    聚类算法与K-means实现 一.聚类算法的数学描述: 区别于监督学习的算法(回归,分类,预测等),无监督学习就是指训练样本的 label 未知,只能通过对无标记的训练样本的学习来揭示数据的内在规律和 ...

  5. 一文读懂Lua元表

    元表 Lua语言中的每种类型的值都有一套可预见的操作集合.例如,我们可以将数字相加,可以连接字符串,还可以在表中插入键值对等,但是我们无法将两个表相加,无法对函数作比较,也无法调用一个字符串,除非使用 ...

  6. K8s 系列(四) - 浅谈 Informer

    1. 概述 进入 K8s 的世界,会发现有很多的 Controller,它们都是为了完成某类资源(如 pod 是通过 DeploymentController, ReplicaSetControlle ...

  7. Shell脚本一键部署——源码编译安装MySQL及自动补全工具

    Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...

  8. 板子题 Sol

    RT Cyber_Tree 出了一道板子题... 这题乍看之下貌似还不戳,但如果您做过类似的题,那么这就是一道板子题.... 首先明确要求的是什么,如果我们只考虑权值最大而不考虑最小距离,那么要求的显 ...

  9. 「山东省队集训2021 Round 1」 半夜

    考虑将 \(X\) 复制一次放到后面再对其长度为 \(n\) 的连续子串和 \(Y\) 求一波 \(\rm{Longest\ Common\ Subsequence}\) 就能得到 \(\Theta( ...

  10. QT程序打包成多平台可执行文件

    一.简述 QT项目开发完成后,需要打包发布程序,在实际生产中不可能把源码发给别人,所以需要将源码打包正可执行文件或者安装程序. 二.设置应用图标 把 ico 文件放到源代码目录下,在QT项目中的'.p ...