在现代Web应用中,密码重置功能是用户账户安全体系中不可或缺的一部分。本文将详细介绍如何使用Vue.js前端框架和SpringBoot后端框架实现一个基于邮箱验证的密码重置功能。

功能概述

本密码重置功能包含以下核心流程:

  1. 用户输入注册邮箱

  2. 系统发送验证码到该邮箱

  3. 用户输入收到的验证码和新密码

  4. 系统验证信息并重置密码

前端实现

页面布局

使用Vue.js和Element UI组件库构建密码重置页面:

<template><div class="Password-container"><div class="allClass"><div class="titleClass"><b>重置邮箱账号登录密码</b></div><el-form :rules="ruleList" :model="user" ref="userForm"><!-- 邮箱输入 --><el-form-item prop="name"><el-input placeholder="请输入您的邮箱" v-model="user.name" prefix-icon="el-icon-message" autocomplete="new-password"></el-input></el-form-item><!-- 验证码输入 --><el-form-item prop="code"><el-input placeholder="邮箱收到的验证码" v-model="user.code" style="width: 188px;" prefix-icon="el-icon-lock"></el-input><el-button type="primary" @click="getEmailCode">获取验证码</el-button></el-form-item><!-- 新密码输入 --><el-form-item prop="password"><el-input placeholder="请设置重置密码" v-model="user.password"show-password prefix-icon="el-icon-lock"></el-input></el-form-item><!-- 操作按钮 --><div class="buttonClass"><el-button type="primary" @click="registerClick">重置密码</el-button><el-button type="warning" @click="$router.push('/login')">返回登录</el-button></div></el-form></div></div>
</template>

表单验证

使用Element UI的表单验证功能确保输入合法性:

data() {return {user: {},ruleList: {name: [{required: true, message: '请输入您的邮箱账号', trigger: 'blur'},{min: 3, max: 20, message: '长度在3-9个字符', trigger: 'blur'}],password: [{required: true, message: '请设置重置密码', trigger: 'blur'},{min: 3, max: 20, message: '长度在3-20个字符', trigger: 'blur'}],code: [{required: true, message: '请输入收到的验证码', trigger: 'blur'},{min: 3, max: 20, message: '长度在3-20个字符', trigger: 'blur'}]}}
}

核心方法

  1. 获取邮箱验证码

getEmailCode() {// 验证邮箱格式if (!this.user.name) {this.$message.warning("请输入邮箱账号")return}if (!/^\w+((.\w+)|(-\w+))@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+).[A-Za-z0-9]+$/.test(this.user.name)) {this.$message.warning("请输入正确的邮箱账号")return}// 发送请求获取验证码this.$http.post("/big/email_code", this.user).then(res => {if (res.data.code === "200") {this.$message.success("邮箱验证码发送成功,请到对应邮箱查看")} else {this.$message.error(res.data.message)}})
}
  1. 重置密码

registerClick() {this.$refs["userForm"].validate(valid => {if (valid) { // 表单校验合法this.$http.post("/big/reset_password", this.user).then(res => {if (res.data.code === "200") {this.$router.push("/login")this.$message.success("重置密码成功,请登录!")} else {this.$message.error(res.data.message)}});}})
}

后端实现

密码重置接口

@PostMapping("/reset_password")
public Res reset_password(@RequestBody User user) {// 查询用户是否存在User existUser;try {QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();userQueryWrapper.eq("name", user.getName());existUser = userMapper.selectOne(userQueryWrapper);} catch (Exception e) {e.printStackTrace();return Res.error(Constants.CODE_500, "系统错误");}if (existUser == null) {return Res.error(Constants.CODE_600, "重置用户名有误,请核实邮箱账号");}// 验证码校验QueryWrapper<Email> emailQueryWrapper = new QueryWrapper<>();emailQueryWrapper.eq("email", user.getName());Email existEmail = emailMapper.selectOne(emailQueryWrapper);if (existEmail != null && !existEmail.getCode().equals(user.getCode())) {if (existEmail.getCode().isEmpty()) {return Res.error(Constants.CODE_600, "验证码已经失效,请重新获取验证码");} else {return Res.error(Constants.CODE_600, "验证码验证失败,请检查验证码是否填写正确");}}// 验证通过后使验证码失效if (existEmail != null && (existEmail.getCode() != null)) {existEmail.setCode("");emailMapper.updateById(existEmail);}// 更新密码(SHA256加密)existUser.setPassword(MyUtils.getSHA256StrJava(user.getPassword()));userMapper.updateById(existUser);return Res.success(null);
}

安全考虑

  1. 密码加密:使用SHA256算法对密码进行加密存储

  2. 验证码时效性:验证通过后立即使验证码失效

  3. 异常处理:捕获数据库操作异常,防止系统错误

  4. 输入验证:前后端双重验证确保数据合法性

总结

本文详细介绍了基于Vue和SpringBoot的邮箱密码重置功能实现。该方案具有以下特点:

  1. 用户友好:清晰的界面提示和操作流程

  2. 安全性高:验证码机制+密码加密存储

  3. 健壮性强:完善的前后端验证和异常处理

实际开发中,还可以考虑添加以下增强功能:

  • 验证码有效期限制(如5分钟过期)

  • 密码强度检查

  • 重置密码链接的有效期控制

  • 操作日志记录

希望本文能帮助开发者快速实现安全的密码重置功能。完整代码已在前文展示,可根据实际需求进行调整和优化。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云云产品的发展趋势:技术创新驱动数字化未来

近年来&#xff0c;随着5G、人工智能&#xff08;AI&#xff09;、大数据、物联网&#xff08;IoT&#xff09;和边缘计算等新兴技术的快速发展&#xff0c;全球云计算产业正迎来新一轮变革。作为中国领先的云服务提供商&#xff0c;华为云依托华为集团在ICT&#xff08;信息与…

防御保护07-08

CIDR 可变长子网掩码 VLSM 无类域间路由NET 用少量的私有地址替换大量的共有地址私网地址不能再互联网上去使用、去分配。这里的互联网指的是公网。服务器映射--用来使外部用户能访问私网服务器。静态映射--公网地址和私网地址进行一对一的映射。地址池--中存在多个公网IP地址时…

PDF转图片工具技术文档(命令行版本)

PDF转图片工具技术文档&#xff08;命令行版本&#xff09; 1. 功能概述 本工具是一个基于PyMuPDF库的PDF转图片命令行工具&#xff0c;能够&#xff1a; 通过命令行参数接收PDF文件路径将PDF的每一页转换为PNG格式的图片自动创建输出目录&#xff08;./static&#xff09;保存…

k8s+isulad 国产化技术栈云原生技术栈搭建1-VPC

为响应政策&#xff0c;最近在捣鼓国产化云原生平台的搭建。在搭建过程中遇到了问题记录下来&#xff0c;以备后续查找。 我选用了中国电子云的云平台来搭建K8S集群&#xff0c;选用的技术栈是华为开源的openeulerk8sisulad框架&#xff0c;参考官网文档资料&#xff1a;iSula…

chatgpt plus简单得,不需要求人,不需要野卡,不需要合租,不需要昂贵的价格

ChatGPT Plus&#xff1a;开启智能对话的新纪元 引言&#xff1a;AI助手的时代已经到来 在当今信息爆炸的时代&#xff0c;人工智能助手已经成为我们工作、学习和生活中不可或缺的伙伴。作为AI领域的佼佼者&#xff0c;ChatGPT自问世以来就以其强大的语言理解和生成能力赢得了…

鸿蒙OS 系统安全

鸿蒙OS 系统安全 在搭载 HarmonyOS 的分布式终端上&#xff0c;可以保证“正确的人&#xff0c;通过正确的设备&#xff0c;正确地使用数据”。 • 通过“分布式多端协同身份认证”来保证“正确的人”。 • 通过“在分布式终端上构筑可信运行环境”来保证“正确的设备”。 • …

【Dify学习笔记】:保留原所有数据,升级Dify版本

【Dify学习笔记】&#xff1a;保留原所有数据&#xff0c;升级Dify版本原版本1.4.0 升级最新版1.7.1由于是升级成功后才记录的笔记&#xff0c;没法获取旧页面的版本了&#xff0c;先看下镜像信息&#xff0c;上面的拉取的新容器&#xff0c;下面的之前的旧容器1、关闭旧docker…

微信小程序功能实现:页面导航与跳转

1. 声明式导航&#xff08;navigator组件&#xff09;声明式导航通过在WXML页面中使用 <navigator> 组件来实现页面跳转&#xff0c;使用起来较为直观简便&#xff0c;语法格式如下&#xff1a;<navigator url"目标页面路径" open-type"跳转类型"…

GenieWizard: Multimodal App Feature Discovery with LargeLanguage Models

GenieWizard:使用LargeLanguage模型发现多模式应用程序功能 以下是对论文《GenieWizard: Multimodal App Feature Discovery with Large Language Models》的详细总结,结合教育技术学视角的分析: 一、核心问题与背景 问题背景: 多模态交互(如语音+触摸)比传统图形交互更灵…

[硬件电路-120]:模拟电路 - 信号处理电路 - 在信息系统众多不同的场景,“高速”的含义是不尽相同的。

一、按照维度区分在信息系统中&#xff0c;“高速”是一个相对且多维的概念&#xff0c;其核心在于信号或数据的动态变化速率远超传统系统处理能力&#xff0c;导致必须采用专门的设计技术来保障传输质量与实时性。这一概念可从以下四个维度解析&#xff1a;1、频率维度&#x…

React ahooks——副作用类hooks之useThrottleFn

useThrottleFn 用于创建一个节流函数&#xff0c;确保该函数在指定时间内最多执行一次。一、基本使用import { useThrottleFn } from ahooks; import { Button, Space } from antd;const ThrottleDemo () > {const { run, cancel, flush } useThrottleFn((message) > {…

PostgreSQL——函数

PostgreSQL函数一、数学函数1.1、绝对值函数ABS(x)和圆周率函数PI()1.2、平方根函数SQRT(x)和求余函数MOD(x,y)1.3、取整函数CEIL(x)、CEILING(x)和FLOOR(x)1.4、四舍五入函数ROUND(x)和ROUND(x,y)1.5、符号函数SIGN(x)1.6、幂运算函数POW(x,y)、POWER(x,y)和EXP(x)1.7、对数运…

ffmpeg下载windows教程

1.百度搜索ffmpeg&#xff0c;进入官网2.点击Download3.点击windows图标&#xff0c;选择蓝色框内的点击4.点击蓝色框内带有win64下载5.下载完好打开bin&#xff0c;看到3个exe文件6.打开cmd文件输入 ffmpeg -version &#xff0c;出现以下画面证明安装成功7.然后添加环…

解锁高并发LLM推理:动态批处理、令牌流和使用vLLM的KV缓存秘密

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

跨域场景下的Iframe事件监听

背景在当前window窗口&#xff0c;对于一些浮窗组件&#xff0c;一般需要点击当前window下的其他位置才能够隐藏浮窗。但如果当前窗口中存在iframe区域&#xff0c;那么由于一些特殊的性质&#xff0c;无法通过常规的click点击事件监听iframe元素的点击&#xff0c;而通过conte…

零知识证明入门应用指南:原理与Python实践

目录 零知识证明入门应用指南:原理与Python实践 1. 引言:隐私计算的革命 2. 零知识证明基础原理 2.1 数学基础:离散对数问题 2.2 基本协议流程 2.3 核心概念 3. Schnorr协议:经典ZKP实现 3.1 协议数学描述 3.2 Python实现 4. 非交互式证明:Fiat-Shamir变换 4.1 原理 4.2 P…

PyTorch中三角函数与特殊运算详解和实战场景示例

在 PyTorch 中&#xff0c;三角函数&#xff08;如 sin, cos, tan 等&#xff09;和一些特殊数学运算&#xff08;如双曲函数、反三角函数、hypot, atan2, clamp, lerp, sigmoid, softplus, special 模块等&#xff09;被广泛用于科学计算、机器学习、深度学习中的前向推理或梯…

论文阅读: Mobile Edge Intelligence for Large LanguageModels: A Contemporary Survey

地址&#xff1a;Mobile Edge Intelligence for Large Language Models: A Contemporary Survey 摘要 设备端大型语言模型&#xff08;LLMs&#xff09;指在边缘设备上运行 LLMs&#xff0c;与云端模式相比&#xff0c;其成本效益更高、延迟更低且更能保护隐私&#xff0c;因…

JavaWeb(苍穹外卖)--学习笔记17(Websocket)

前言 本篇文章是学习B站黑马程序员苍穹外卖的学习笔记&#x1f4d1;。我的学习路线是Java基础语法-JavaWeb-做项目&#xff0c;管理端的功能学习完之后&#xff0c;就进入到了用户端微信小程序的开发&#xff0c;&#x1f64c;用户下单并且支付成功后&#xff0c;需要第一时间通…

WebForms 简介

WebForms 简介 概述 WebForms 是微软公司推出的一种用于构建动态网页和应用程序的技术。自 2002 年推出以来,WebForms 成为 ASP.NET 技术栈中重要的组成部分。它允许开发者以类似于桌面应用程序的方式创建交互式网页,极大地提高了 Web 开发的效率和体验。 WebForms 的工作…