Je reçois cette erreur lors de la connexion à un utilisateur enregistré, bien sûr, j'ai eu cette erreur après avoir utilisé le package dotenv pour sécuriser ma clé de cryptage de base de données
mais proccess.env.SECRET
travaille currectly
je suppose que mon problème est ici:
Error: Authentication code missing at Object.schema.methods.authenticateSync (C:\Users\Amir\Desktop\security\node_modules\mongoose-encryption\lib\plugins\mongoose-encryption.js:419:23) at model.<anonymous> (C:\Users\Amir\Desktop\security\node_modules\mongoose-encryption\lib\plugins\mongoose-encryption.js:239:47) at Kareem.execPreSync (C:\Users\Amir\Desktop\security\node_modules\kareem\index.js:115:16) at model.syncWrapper [as $__init] (C:\Users\Amir\Desktop\security\node_modules\kareem\index.js:232:12) at model.Document.init (C:\Users\Amir\Desktop\security\node_modules\mongoose\lib\document.js:513:8) at completeOne (C:\Users\Amir\Desktop\security\node_modules\mongoose\lib\query.js:2853:12) at model.Query.Query._completeOne (C:\Users\Amir\Desktop\security\node_modules\mongoose\lib\query.js:2094:7) at Immediate.<anonymous> (C:\Users\Amir\Desktop\security\node_modules\mongoose\lib\query.js:2138:10) at Immediate.<anonymous> (C:\Users\Amir\Desktop\security\node_modules\mquery\lib\utils.js:116:16) at processImmediate (internal/timers.js:456:21)
app.js:
require("dotenv").config(); const express = require("express"); const bodyParser = require("body-parser"); const ejs = require("ejs"); const mongoose = require("mongoose"); const encrypt = require("mongoose-encryption"); const app = express(); app.use(express.static("public")); app.set("view engine", "ejs"); app.use(bodyParser.urlencoded({ extended: true })); mongoose.connect("mongodb://localhost:27017/userDB", { useUnifiedTopology: true, useNewUrlParser: true, }); const userSchema = new mongoose.Schema({ email: String, password: String, }); //_ // encrypting password field // | userSchema.plugin(encrypt, { // | i guess problem is here secret: process.env.SECRET, // | encryptedFields: ["password"], //_| }); const User = mongoose.model("User", userSchema);
Erreur :
userSchema.plugin(encrypt, { secret: process.env.SECRET, encryptedFields: ["password"], });
6 Réponses :
Vous devez supprimer les documents existants dans votre base de données et réexécuter le code avec un document vide.
J'ai eu le même problème et cela a fonctionné pour moi:
Accédez à votre base de données en utilisant votre terminal en utilisant (autant que je peux voir que vous utilisez mongo) ex: show dbs
, use databaseName
, show collections
, db.databaseName.find()
puis
Videz votre base de données db.databaseName.drop()
(si c'est important, gardez-le dans un endroit sûr pour pouvoir le réutiliser à nouveau, cela devrait être facile si vous utilisez Postman)
Et recréez votre base de données
En fait, le fait est que vous utilisez peut-être votre nouveau cryptage sur des données qui ont été stockées avant l'ajout du cryptage, alors que si vous vérifiez la même chose avec les nouvelles données, cela fonctionnera correctement, vous devez donc d'abord créer une nouvelle base de données afin que vous ajoutez-y de nouveaux éléments, et nous espérons que cela fonctionnera pour vous. :)
Eh bien, j'étais confronté au même problème, mais cela ne concerne que les données que vous avez précédemment stockées dans la base de données en utilisant le cryptage mongoose sans dotenv. Cependant, cela fonctionne bien
Le port 27017 du serveur MongoDB n'est pas actif sur votre système. Pour ce faire, écrivez simplement la commande "mongod" dans un autre onglet de votre hyper terminal.
La raison en est que vous avez peut-être changé la "clé de cryptage". Si vous pouvez trouver celle que vous avez créée au début, vous pouvez toujours vérifier et utiliser cette base de données dans votre fichier (.js). Cependant, "Erreur: code d'authentification manquant (cryptage Mongoose)" ne signifie pas que vous le détruisez. Vous pouvez toujours utiliser. Essaye!