当前位置: 首页 > news >正文

Node编写重置用户密码接口

目录

前言

定义路由和处理函数

验证表单数据

实现重置密码功能


前言

接前面文章,本文介绍如何编写重置用户密码接口

定义路由和处理函数

路由

// 重置密码的路由
router.post('/updatepwd', userinfo_handler.updatePassword)

处理函数

exports.updatePassword=(req,res)=>{res.send('重置成功')
}

postman验证

需要在headers中添加请求头authorization,并且加上在登录时生成的token值

验证表单数据

定义验证规则对象并将其导出

// 验证规则对象 - 重置密码
exports.update_password_schema = {body: {// 使用 password 这个规则,验证 req.body.oldPwd 的值oldPwd: password,// 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则,验证 req.body.newPwd 的值// 解读:// 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致// 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值// 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则newPwd: joi.not(joi.ref('oldPwd')).concat(password),},
}

导入验证规则对象

// 导入需要的验证规则对象
const { update_password_schema } = require('../schema/user')

在重置密码路由中添加验证

//重置用户密码router.post('/updatePwd',expressJoi(update_password_schema),userinfo_handler.updatePassword)

使用postman,当原密码与密码相同时

实现重置密码功能

定义sql语句

const sql = 'select * from ev_users where id=?'

db.query()调用sql语句

db.query(sql,req.auth.id,(err,results)=>{//判断sql语句是否正确if(err) return res.send({status:1,message:err.message})//判断影响行数是否为1if(results.length!==1) return res.send({status:1,message:'密码重置失败'})res.send('密码重置成功')
})

导入bcryptjs密码加密模块

const bcrypt = require('bcryptjs')

判断原密码是否正确

// 判断提交的旧密码是否正确
const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
if (!compareResult) return res.cc('原密码错误!')

对新密码加密,定义新的更新密码的sql语句并对sql语句操作

对新密码加密

const newPwd = bcrypt.hashSync(req.body.newPwd,10)

定义sql语句

const sql = 'update ev_users set password =? where id =?'

使用db.query()调用sql语句

db.query(sql,[newPwd,req.auth.id],(err,results)=>{if(err) return res.send({status:1.message:err.message})if(results.affectedRow!==1) return res.send({status:1,message:'更新密码失败'})res.send({status:0,message:'密码更新成功'})
})

重置密码接口完整代码

// 导出重置用户密码
exports.updatePassword=(req,res)=>{// 定义sql语句const sql = 'select * from ev_users where id=?'db.query(sql,req.auth.id,(err,results)=>{// 判断sql语句是否正确if(err) return res.send({status:1,message:err.message})// 检查id是否存在if(results.length!==1) return res.send({status:1,message:'该用户不存在'})// 验证密码是否正确const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)if(!compareResult) return res.send({status:1,message:'原密码错误'})// 定义sql语句const sql = 'update ev_users set password =? where id = ?'// 对新密码进行加密const newPwd = bcrypt.hashSync(req.body.newPwd,10)// 执行sql语句,根据id查找db.query(sql,[newPwd,req.auth.id],(err,results)=>{// sql语句执行失败if(err) return res.send({status:1,message:err.message})// sql语句执行成功,但影响行数不为1if(results.affectedRows!==1) return res.send({status:1,message:'更新密码失败'})res.send({status:0,message:'密码更新成功'})})})
}

使用postman模拟发送请求

用户b,原密码为000000

当输入错误的原密码时

输入正确的原密码时

相关文章:

Node编写重置用户密码接口

目录 前言 定义路由和处理函数 验证表单数据 实现重置密码功能 前言 接前面文章,本文介绍如何编写重置用户密码接口 定义路由和处理函数 路由 // 重置密码的路由 router.post(/updatepwd, userinfo_handler.updatePassword) 处理函数 exports.updatePasswo…...

Day13力扣打卡

打卡记录 奖励最顶尖的 k 名学生(哈希表排序) 用哈希表对所有的positive与negative词条进行映射,然后遍历求解。tip:常用的分割字符串的操作:1.stringstream配合getline() [格式buf, string, char]2.string.find()[find未找到目标会返回npos…...

独立开发者知识贴

有一个github仓库,叫做独立开发变现周刊,很不错,作者能从21年能坚持更新到现在,我很佩服。 它里边有很多独立开发者成功的作品案例,我对这些很感兴趣。 在阅读时,我会问自己以下几个问题: 解…...

软考系列(系统架构师)- 2009年系统架构师软考案例分析考点

试题一 软件架构设计 【问题1】(9分) 软件质量属性是影响软件架构设计的重要因素。请用200字以内的文字列举六种不同的软件质量属性名称并解释其含义。 常见的软件质量属性有多种,例如性能(Performance)、可用性(Ava…...

C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考…...

如何快速解决d3dcompiler_43.dll缺失问题?五种方法快速解决

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“D3DCompiler_43.dll缺失”。这个错误通常会导致游戏、应用程序或系统无法正常运行。为了解决这个问题,我们需要采取一些修复方案来恢复缺失的文件。本文将介绍五个修复D3DCompi…...

mongodb数据迁移的方法

这个方法只能将数据从一个mongo数据库转移到另一个mongo数据库 这个命令可以备份mongo数据(mongo数据库中的数据备份转换为文件) mongodump --host HOST --port PORT --username USERNAME --password PASSWORD --db DB -c COLLECTION --out OUT这个命令…...

Spring MVC 中文文档

1. Spring Web MVC Spring Web MVC是建立在Servlet API上的原始Web框架,从一开始就包含在Spring框架中。正式名称 “Spring Web MVC” 来自其源模块的名称( spring-webmvc),但它更常被称为 “Spring MVC”。 与Spring Web MVC并…...

RedissonCach的源码流程

上: https://blog.csdn.net/Michelle_Zhong/article/details/126384566 中: https://blog.csdn.net/michelle_zhong/category_11874153.html 下: https://blog.csdn.net/Michelle_Zhong/article/details/126391915?ops_request_misc%257B%…...

spring-基于注解管理bean

基于注解管理bean 一、标记与扫描1、引入依赖2、创建spring配置文件3、创建组件4、扫描组件4.1、基本扫描&#xff1a;4.2、指定要排除的组件4.3、仅扫描指定组件 二、基于注解的自动装配 一、标记与扫描 1、引入依赖 <dependencies> <!-- 基于Maven依赖传递性&…...

数据挖掘(7.1)--数据仓库

目录 引言 一、数据库 1.简介 2.数据库管理系统(DBMS) 二、数据仓库 数据仓库特征 数据仓库作用 数据仓库和DBMS对比 分离数据仓库和数据库 引言 数据仓库的历史可以追溯到20世纪60年代&#xff0c;当时计算机领域的主要工作是创建运行在主文件上的单个应用&#xff0…...

Vue3问题:如何实现密码加密登录?前后端!

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约3400字&#xff0c;整篇阅读大约需要6分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …...

【爬虫】python打包可执行程序(ui界面制作完成后)

1.安装pyinstaller pip install pyinstaller可能出现连接超时安装不上的情况,可以切换源进行下载 pip install -i http://pypi.douban.com/simple/ pyinstaller2.打包程序 pyinstaller xxxxx.py --noconsole --hidden-import PySide6.QtXml...

取Dataset子集(pytorch)

取Dataset子集--pytorch 1. why2. how3. example 1. why 我们在调试深度学习代码时&#xff0c;常常会遇到数据集太大&#xff0c;导致调试浪费时间的情况&#xff0c;这种情况下&#xff0c;将数据集中的一个子集拿出来用于调试代码&#xff0c;调试成功在用完整的数据集运行…...

如何选择消息队列

作为一个程序员&#xff0c;我们必须要认识到&#xff0c;软件工程中是不存在”银弹“的。<!--more--> 在消息队列的选型问题上&#xff0c;也是同样的道理。并不存在哪个消息队列就是最好的&#xff0c;能够解决所有的问题。常用的消息队列有好几个&#xff0c;每一种都…...

读取mysql数据库表结构生成接口文档

1、引入依赖 <!-- 导出word --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency><!-- https://mvnrepository.com/artifact/e-iceblue/s…...

【MySQL索引与优化篇】InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的上层结构 2. 页的内部结构3. InnoDB行格式(或记录格式)3.1 Compact行格式3.2 Dynamic和Compressed行格式3.3 Redundant行格式 4. 区、段与碎片区4.1 为什么要有区&#xff1f;4.2 为什么要…...

Go学习第十二章——Go反射与TCP编程

Go反射与TCP编程 1 反射1.1 基本介绍1.2 快速入门1.3 注意事项和细节说明1.4 最佳实践 2 Tcp Socket编程2.1 基本介绍2.2 入门案例2.3 服务器监听2.4 服务器接受客户端消息 1 反射 1.1 基本介绍 **反射&#xff1a;**在编译时静态类型语言中实现动态特性的一种机制。 Go语言…...

uniapp编译微信小程序富文本rich-text的图片样式不生效原因

this.detail.contents this.detail.contents.replace(/\<img/gi, <img style"display:block;max-width:90%;height:auto;border:2px solid #eee;box-shadow:5px 5px 5px rgba(100,100,100,0.8);margin-bottom:10px;text-align:center;" );开始采用这个replace…...

Django实战项目-学习任务系统-任务管理

接着上期代码框架&#xff0c;开发第3个功能&#xff0c;任务管理&#xff0c;再增加一个学习任务表&#xff0c;用来记录发布的学习任务的标题和内容&#xff0c;预计完成天数&#xff0c;奖励积分和任务状态等信息。 第一步&#xff1a;编写第三个功能-任务管理 1&#xff0…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...