Express + MongoDB 实现新增用户密码加密

使用 bcryptjs 依赖实现用户加密。

1. 安装依赖

bash 复制代码
npm install bcryptjs

2. 定义用户模型

创建一个 `userModel.js` 文件,在其中定义用户模型,并在保存用户信息时对密码进行加密

javascript 复制代码
const mongoose = require("mongoose");

const bcrypt = require("bcryptjs");

// 定义用户信息的 Schema

const userSchema = new mongoose.Schema({

  username: {

    type: String,

    required: true,

    unique: true,

  },

  password: {

    type: String,

    required: true,

  },

});

// 在保存用户信息前对密码进行加密

userSchema.pre("save", async function (next) {

  const user = this;

  // 只有当密码字段被修改时才进行加密操作

  if (!user.isModified("password")) return next();

  // 生成盐,盐的复杂度为 10

  const salt = await bcrypt.genSalt(10);

  // 使用盐对密码进行哈希处理

  const hash = await bcrypt.hash(user.password, salt);

  // 将加密后的密码赋值给用户的密码字段

  user.password = hash;

  next();

});

// 定义一个比较密码的方法

userSchema.methods.comparePassword = async function (candidatePassword) {

  return await bcrypt.compare(candidatePassword, this.password);

};

// 创建用户模型

module.exports = new mongoose.model("User", userSchema);
相关推荐
翔云1234561 分钟前
mysql.gtid_executed 表的初始化和更新机制
数据库·mysql·adb
alphaTao25 分钟前
LeetCode 每日一题 2025/12/1-2025/12/7
数据库·算法·leetcode
马克学长28 分钟前
SSM特种设备全生命周期管理系统8b729(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·特种设备管理·全生命周期
小馒头学python34 分钟前
openEuler 向量数据库:Milvus 相似度搜索性能测试
数据库·milvus·openeuler
正在走向自律42 分钟前
Oracle迁移实战:从兼容性挑战到平滑过渡金仓数据库的解决方案
数据库·oracle·国产数据库·金仓数据库·兼容性挑战·迁移成本
QAQalone1 小时前
MySQL实际项目中常用的 DDL 模板
数据库·mysql
Evand J1 小时前
【MATLAB例程】二维指纹对目标的一段轨迹定位,锚点数量可调。输出位置真值、估计值对比,附代码下载链接
开发语言·数据库·matlab
赵渝强老师1 小时前
【赵渝强老师】国产金仓数据库的体系架构
数据库·oracle·架构
此生只爱蛋1 小时前
【Redis】浅谈数据结构和内部编码和单线程架构
数据结构·数据库·redis
工藤学编程1 小时前
零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
数据库·人工智能·langchain