Ошибка: сбой аутентификации (Mongoose-encryption)

#mongoose #mongoose-schema

#mongoose #mongoose-schema

Вопрос:

Я без проблем использую mongoose encryption в другой коллекции того же приложения, но теперь, когда я хочу использовать его в новой коллекции, документы сохраняются в зашифрованном виде, но когда я пытаюсь их получить, я получаю следующую ошибку, и я не могу найти, в чем проблема.

Сообщение об ошибке:

 Error: Authentication failed
at Object.schema.methods.authenticateSync (C:ProyectosLIMSpnode_modulesmongoose-encryptionlibpluginsmongoose-encryption.js:436:19)
at model.<anonymous> (C:ProyectosLIMSpnode_modulesmongoose-encryptionlibpluginsmongoose-encryption.js:239:47)
at Kareem.execPreSync (C:ProyectosLIMSpnode_moduleskareemindex.js:115:16)
at model.syncWrapper [as $__init] (C:ProyectosLIMSpnode_moduleskareemindex.js:232:12)
at model.Document.init (C:ProyectosLIMSpnode_modulesmongooselibdocument.js:486:8)
at completeMany (C:ProyectosLIMSpnode_modulesmongooselibhelpersquerycompleteMany.js:41:14)
at cb (C:ProyectosLIMSpnode_modulesmongooselibquery.js:1928:9)
at C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodbliboperationsexecute_operation.js:75:17
at executeCallback (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodbliboperationsexecute_operation.js:68:9)
at handleCallback (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodblibutils.js:129:55)
at C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodbliboperationsto_array.js:36:13
at handleCallback (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodblibutils.js:129:55)
at completeClose (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodblibcursor.js:859:16)
at Cursor.close (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodblibcursor.js:878:12)
at C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodbliboperationsto_array.js:35:25
at handleCallback (C:ProyectosLIMSpnode_modulesmongoosenode_modulesmongodblibcorecursor.js:32:5)
  

Код схемы:

 const mongoose = require("mongoose");
const encrypt = require("mongoose-encryption");

const analitoSchema = mongoose.Schema({
  
  nombre: String,
  abreviatura: String,
  CAS: String,
  sinonimos: [String],
  grupoSustancias: [String],
  estandarInterno: {value: Boolean, viewValue: String},
  sectores: [String],
  rubros: [String],
  habilitado: {value: Boolean, viewValue: String},
  excluido: {value: Boolean, viewValue: String},
  observaciones: String
});

var encKey = "J/zNLhysm3yMP8v24 gsCZe7dccgq4pX5bxrM6X0vHM=";
var sigKey ="ZR35/JqMv0J1V7JU WMkV2U3HOjadPS6S6DExi2lv5v1N7S1T1I6Jm33ZSHMlnjz5qJeG0j3Qqm7ECvHMSr Mg==";

analitoSchema.plugin(encrypt, { encryptionKey: encKey, signingKey: sigKey });

module.exports = mongoose.model("Analito", analitoSchema);
  

Сохранение кода схемы:

 exports.save= (req, res, next) => { 
  const analito = new Analito(req.body) 
  analito.save()
  .then(documents => {       
    res.status(201).json({
      message: newSavedMessage,
      data: documents,
      error: null
    });
  })
  .catch(err => {
    errorHandler.errorHandler(err, res);
  })
};
  

Получить код всех документов:

 exports.getAll= (req,res, next) => {
  Analito.find()
    .then((documents) => {
      filteredDocuments = documents.filter((data) =>data.excluido.value != true);
      res.status(200).json({
        message: successfullMessage,
        data: filteredDocuments,
        error: null,
      });
    })
    .catch((err) => errorHandler.errorHandler(err, res));
  };
  

Ответ №1:

Я обнаружил, что проблема заключалась в функции сохранения.

Я передавал req.body в качестве аргумента при создании нового объекта схемы. New Analito(req.body) .

Это работало нормально, если я не шифровал данные с помощью mongoose-encryption, но при шифровании данных это не сработало.

Решением было передать данные для каждого поля схемы.

   const analito = new Analito({
    nombre: req.body.nombre,
    abreviatura: req.body.abreviatura,
    CAS: req.body.CAS,
    sinonimos: req.body.sinonimos,
    grupoSustancias: req.body.grupoSustancias,
    estandarInterno: {
      value: req.body.estandarInterno.value,
      viewValue: req.body.estandarInterno.viewValue
    },
    sectores: req.body.sectores,
    rubros: req.body.rubros,
    habilitado: {
      value: req.body.habilitado.value,
      viewValue: req.body.habilitado.viewValue
    },
    excluido: {
      value: req.body.excluido.value,
      viewValue: req.body.excluido.viewValue
    },
    observaciones: req.body.observaciones
  })