vue + koa2 + crypto-js + md5加密:创建加密账户、登录验证

本文主要是介绍vue + koa2 + crypto-js + md5加密:创建加密账户、登录验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前端页面设置

1、创建账户

import CryptoJS from 'crypto-js';
const loginFun = function () {request({url: '/user/register',method: 'post',data: {username: ruleForm.username,password: CryptoJS.MD5(ruleForm.password).toString(),role: ruleForm.role}}).then((res) => {console.log(res);});
};

2、登录

import CryptoJS from 'crypto-js';
const loginFun = function () {request({url: '/user/login',method: 'post',data: {username: ruleForm.username,password: CryptoJS.MD5(ruleForm.password).toString()}}).then((res) => {if (res.data.success && res.data && res.data.data) {const role = res.data.data.role;const username = res.data.data.username;const token = res.data.token;localStorage.setItem('role', role);localStorage.setItem('username', username);localStorage.setItem('token', token);router.push('/');return;}ElMessage({type: 'warning',message: res.data.message});});
};

前端其实没什么说的,无论是创建还是登录,每次只需要加密后发到后端即可

二、后端操作

后端是koa2 + elasticsearch数据库

后端在收到后,为了增强安全,我们不会直接将前端的 password 储存到数据库中,需要再次加密一次,然后在登录时对比再次加密的数据是否相等,核心代码如下

const crypto = require(‘crypto’);
const hash = crypto.createHash(‘md5’)
hash.update(registerBody.password);
const encryptedPassword = hash.digest(‘hex’); // 这个就是再次加密后的数据

1、创建

async registerUser(ctx, next) {console.log('registerUser');const registerBody = ctx.request.body;// 这里就是再次加密的逻辑const hash = crypto.createHash('md5')hash.update(registerBody.password);const encryptedPassword = hash.digest('hex');console.log('encryptedPassword', encryptedPassword);// 储存在数据库中的操作,这里大家按自身实际情况处理let result = await modulesBase.registerUser({body: {username: registerBody.username,password: encryptedPassword,role: registerBody.role}});console.log(result);ctx.body = {data: result};}

2、登录

async loginFun(ctx, next) {const registerBody = ctx.request.body;console.log('loginFun');console.log(registerBody);// 登录时 拿到密码我们这里也是再次加密,这样就和数据库中储存的逻辑一致了const hash = crypto.createHash('md5')hash.update(registerBody.password);const encryptedPassword = hash.digest('hex');// 查找逻辑,根据用户名和密码查找是否有对应的数据// 这里其实有一个优化的点,我们应该先查找用户名 如果用户名匹配不上,自然登录失败// 然后再查找到用户名后 对比密码是否一致,我这里直接匹配了let result = await modulesBase.searchUser({query: {bool: {must: [{match: {username: registerBody.username}},{match: {password: encryptedPassword}}]}}});if (result.hits && result.hits.hits.length) {ctx.body = {data: {data: {role: result.hits.hits[0]._source.role,username: result.hits.hits[0]._source.username},message: 'success',success: true,token: token.signToken({username: registerBody.username, password: registerBody.password})}};return;}ctx.body = {data: {data: null,message: 'Incorrect account or password',success: false}};}

这篇关于vue + koa2 + crypto-js + md5加密:创建加密账户、登录验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989245

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv