网站的登录注册实现逻辑

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

技术列表:

  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)
})
})

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

参考文献:

【码神之路】博客开发;

结束:

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

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

最新文章

  1. Android四大核心组件之BroadCastReceiver
  2. C#使用QQ邮箱发送邮件
  3. Java基础知识学习(七)
  4. android:imeOptions属性(转)
  5. 使用 CSS 去掉 iPhone 网页上按钮的超大圆角默认样式
  6. JavaScript高级程序设计之EventUtil
  7. 利用Hessian如何实现Webservice
  8. android opencv 人脸检测
  9. servletConfig对象
  10. C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
  11. Threejs 它可以在建立其内部房间效果可见
  12. sql 行转列 PIVOT 列转行 UNPIVOT
  13. c#简单易用的短信发送服务 悠逸企业短信服务
  14. 浅谈PHP异常处理
  15. Web前端 页面功能——点击按钮返回顶部的实现方法
  16. Ubuntu 16.04 上安装 PCL 1.8.0
  17. django CBV视图源码分析
  18. java技术第二次作业
  19. [转]一图读懂JVM架构解析
  20. Linux中使用python测试主机存活 Linux系统CentOS Linux release 7.3.1611 (Core) py版本Python 2.7.5

热门文章

  1. mysql基础操作(三):数据约束
  2. 微信小程序的button按钮设置宽度无效
  3. eclipse 将本地插件引用(多种方法)
  4. APMserv 5.2.6 安装教程
  5. redux的使用
  6. NOIP模拟21:「Median·Game·Park」
  7. C语言中volatile、register、const、static、extern、 auto关键字的作用
  8. MySQL实战45讲(01--05)-笔记
  9. window 日志的查看与清理
  10. SpringBoot异步使用@Async原理及线程池配置