我在登录注册用户时遇到此错误 当然,在使用 dotenv 程序包来保护我的数据库加密密钥
后,出现了此错误但是proccess.env.SECRET
正在正常工作
我想我的问题在这里:
userSchema.plugin(encrypt, {
secret: process.env.SECRET,
encryptedFields: ["password"],
});
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);
错误:
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)
答案 0 :(得分:3)
我遇到了同样的问题,这对我有用:
使用您的终端导航到您的数据库,例如:
show dbs
,use databaseName
,show collections
,db.databaseName.find()
,然后
清空数据库db.databaseName.drop()
(如果它很重要,请将其保存在安全的地方,以便您可以再次重用它,如果使用Postman,应该很容易)
并重新创建数据库
答案 1 :(得分:1)
您应该删除数据库中的现有文档,然后使用空文档再次运行代码。
答案 2 :(得分:1)
实际上,事实是您可能在加密之前存储的数据上使用了新的加密,但是如果对新数据进行检查将可以正常工作,因此应首先创建一个新数据库这样您可以在其中添加新的项目,希望它可以为您工作。 :)
答案 3 :(得分:1)
好吧,我也遇到了同样的问题,但是它只发生在您以前使用mongoose加密而不使用dotenv的情况下存储在数据库中的数据上。 但是,它工作正常
答案 4 :(得分:0)
原因是您可能更改了“加密密钥”。如果您可以找到开始时创建的数据库,则仍然可以在(.js)文件中检查并使用此数据库。但是,“错误:身份验证代码丢失(猫鼬加密)”并不意味着您将其销毁。您仍然可以使用。试试看!
答案 5 :(得分:0)
此错误的原因是您无法加密已存储在数据库中的数据。尝试创建新的用户名和密码,然后尝试使用新的用户名和密码登录。它会完全正常工作。您编写的代码没有问题。
答案 6 :(得分:-2)
您的系统上没有激活MongoDB服务器端口27017。 为此,只需在超级终端的另一个选项卡中编写“ mongod”命令即可。