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);
相关推荐
周厉7 小时前
酒店PMS系统设计:房型房价管理与动态价格优先级实现(Java/MySQL)
java·数据库·pms酒店系统
howard20057 小时前
任务 2-3 图形化管理工具Navicat
数据库·mysql·navicat
一碗白开水一7 小时前
Day 5 · 弹性 | 微观
java·前端·数据库
迪飞特科技7 小时前
大模型接入业务系统:API、本地部署、RAG、智能体四种路线怎么选
java·数据库·人工智能·知识图谱·deepseek·本地化大模型
星轨zb7 小时前
[专题5]支付发放物品的一致性保障:事务、幂等与状态流转
数据库·后端·mongodb·支付架构学习
保密资质顾问说7 小时前
保密培训三大误区纠正:从形式主义到持续合规
数据库
泡海椒7 小时前
JQuick-SQL GROUP BY 聚合:COUNT、SUM、AVG、MIN 与 MAX
数据库·sql
小冯不疯7 小时前
销售订单同步实战:从聚水潭到金蝶云星空的线上出库单落地
大数据·数据库
qq_401700418 小时前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
Leon-Ning Liu8 小时前
Oracle参数对比脚本分享:对比 SPFILE 参数与内存参数差异,支持 11g 到 19c
数据库·oracle