VUE+SPRINGBOOT從0-1打造前后端-前后臺系統-郵箱重置密碼

在現代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 的工作…