MongoDb + Мангуст |Как хешировать массив паролей вместо одного пароля - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть массив json, содержащий данные почти 300 пользователей. Я использую (Mongoose) Model.InsertMany () для сохранения массива пользовательских данных в Mongodb. Для хеширования однопользовательского пароля я использую это руководство: https://www.mongodb.com/blog/post/password-authentication-with-mongoose-part-1

, но я хочу хэшировать пароли всех пользователей одновременно. Это руководство использует функцию 'save' для хеширования, но поскольку я использую 'InsertMany ()' для дампирования в Mongodb, как я могу добиться хеширования с помощью InsertMany ()

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

вам нужно создать pre хуков на мангусте, которые будут вызываться перед созданием документа, в pre hook функции вы можете использовать bcrypt библиотека узлов, генерирующая строку хеша.

0 голосов
/ 01 ноября 2019

Вы можете использовать хук предварительного сохранения в своей пользовательской модели.

Проблема в том, что InsertMany не работает с хуком предварительного сохранения.

Но использование Model.create вызовет любые хуки, объявленные на вашемсхема.

Таким образом, вы можете использовать метод User.create (), чтобы заставить его работать.

https://mongoosejs.com/docs/api/model.html#model_Model.create

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  }
});

userSchema.pre('save', async function(next) {
  this.password = await bcrypt.hash(this.password, 12);
  next();
});

const User = mongoose.model('User', userSchema);

module.exports = User;
0 голосов
/ 01 ноября 2019

Mongoose insertMany() не вызывает хук .save(). Итак, сначала вы должны хешировать все пароли, а затем использовать функцию insertMany() для вставки их в базу данных.

...