使用mongoose和bcrypt怎么实现一个用户密码加密功能
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关使用mongoose和bcrypt怎么实现一个用户密码加密功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使
千家信息网最后更新 2026年11月03日使用mongoose和bcrypt怎么实现一个用户密码加密功能
本篇文章给大家分享的是有关使用mongoose和bcrypt怎么实现一个用户密码加密功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
使用npm安装即可
npm install --save bcrypt
用户模型
下面来创建代码用户user的schema,用户名不能重复
var mongoose = require('mongoose'), Schema = mongoose.Schema, bcrypt = require('bcrypt');var UserSchema = new Schema({ username: { type: String, required: true, index: { unique: true } }, password: { type: String, required: true }});module.exports = mongoose.model('User', UserSchema);加密
下面加入用户模型的是Mongoose的中间件,该中间件使用pre前置钩子,在密码保存之前,自动地把密码变成hash。详细代码如下
let SALT_WORK_FACTOR = 5UserSchema.pre('save', function(next) { var user = this; //产生密码hash当密码有更改的时候(或者是新密码) if (!user.isModified('password')) return next(); // 产生一个salt bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { if (err) return next(err); // 结合salt产生新的hash bcrypt.hash(user.password, salt, function(err, hash) { if (err) return next(err); // 使用hash覆盖明文密码 user.password = hash; next(); }); });});在node.bcrypt.js中SALT_WORK_FACTOR默认使用的是10,这里设置为5
验证
加密之后,密码原文被替换为密文了。我们无法解密,只能通过bcrypt的compare方法,对再次传入的密码和数据库中保存的加密后的密码进行比较,如果匹配,则登录成功
UserSchema.methods.comparePassword = function(candidatePassword, cb) { bcrypt.compare(candidatePassword, this.password, function(err, isMatch) { if (err) return cb(err); cb(null, isMatch); });};把上面的几个步骤串在一起,完整代码如下
var mongoose = require('mongoose'), Schema = mongoose.Schema, bcrypt = require('bcrypt'), SALT_WORK_FACTOR = 5;var UserSchema = new Schema({ username: { type: String, required: true, index: { unique: true } }, password: { type: String, required: true }});UserSchema.pre('save', function(next) { var user = this; // only hash the password if it has been modified (or is new) if (!user.isModified('password')) return next(); // generate a salt bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { if (err) return next(err); // hash the password using our new salt bcrypt.hash(user.password, salt, function(err, hash) { if (err) return next(err); // override the cleartext password with the hashed one user.password = hash; next(); }); });});UserSchema.methods.comparePassword = function(candidatePassword, cb) { bcrypt.compare(candidatePassword, this.password, function(err, isMatch) { if (err) return cb(err); cb(null, isMatch); });};module.exports = mongoose.model('User', UserSchema);测试
把上面的代码保存成user-model.js,然后运行下面代码来实际测试
var mongoose = require('mongoose'), User = require('./user-model');var connStr = 'mongodb://localhost:27017/mongoose-bcrypt-test';mongoose.connect(connStr, function(err) { if (err) throw err; console.log('Successfully connected to MongoDB');});// create a user a new uservar testUser = new User({ username: 'jmar777', password: 'Password123'});// save user to databasetestUser.save(function(err) { if (err) throw err; // fetch user and test password verification User.findOne({ username: 'jmar777' }, function(err, user) { if (err) throw err; // test a matching password user.comparePassword('Password123', function(err, isMatch) { if (err) throw err; console.log('Password123:', isMatch); // -> Password123: true }); // test a failing password user.comparePassword('123Password', function(err, isMatch) { if (err) throw err; console.log('123Password:', isMatch); // -> 123Password: false }); });});控制台中输入如下数据:
数据库数据如下:
以上就是使用mongoose和bcrypt怎么实现一个用户密码加密功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
密码
用户
加密
代码
数据
功能
中间件
数据库
更多
模型
知识
篇文章
面的
测试
实用
成功
再次
原文
实际
密文
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南咖啡
互联网加科技
互联网科技网
互联网属科技
互联网科技战争
互联网金融 科技
深圳艾佳互联网科技
深圳期待互联网科技
中国最先进互联网科技公司
互联网科技公司招聘
博兴的互联网电子科技公司
重庆威客帮互联网科技
互联网校园科技培训
苏州五指互联网络科技有限
千方科技属于互联网企业吗
互联网新科技动漫ppt素材
张召忠谈中国互联网科技
互联网科技年终奖
张家口科技产业互联网平台
盐城市攀科互联网科技有限公司
花魁咖啡
银优互联网科技有限公司
天下捷融互联网科技
互联网金融 科技创新
长亮科技互联网金融
互联网金融科技展
好易买互联网科技
互联网科技博主张洲
互联网科技创业计划的风险分析
互联网的黑科技实验室