javascript 错误:缺少验证代码(Mongoose加密)

jei2mxaa  于 2022-12-25  发布在  Java
关注(0)|答案(8)|浏览(148)

我得到这个错误,而登录注册用户当然我得到这个错误后,使用dotenv来保护我的数据库加密密钥
proccess.env.SECRET工作正常
我想我的问题在这里:

userSchema.plugin(encrypt, {           
    secret: process.env.SECRET,         
    encryptedFields: ["password"],     
});

应用程序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)
dgjrabp2

dgjrabp21#

我也遇到了同样的问题,这对我很有效:
1.导航到您的数据库使用您的终端使用(因为我可以看到你使用mongo)ex:show dbsuse databaseNameshow collectionsdb.databaseName.find(),然后
1.清空你的数据库db.databaseName.drop()(如果它是重要的东西,然后把它放在安全的地方,这样你就可以再次使用它,如果你使用 Postman 应该很容易)
1.并重新创建数据库

k4emjkb1

k4emjkb12#

您应该删除数据库中的现有文档,然后使用空文档再次运行代码。

6za6bjd0

6za6bjd03#

实际上,问题是您可能正在对添加加密之前存储的数据使用新的加密,而如果您检查新数据是否相同,它将正常工作,因此您应该首先创建一个新数据库,以便在其中添加新项目,它将有望为您工作。:)

vtwuwzda

vtwuwzda4#

嗯,我也遇到过同样的问题,但它只发生在您以前使用mongoose加密而不使用dotenv存储在数据库中的数据上。
1.当您通过注册为新用户创建新数据时。
1.删除数据库并创建一个新数据库。(请确保在执行此操作之前保存了数据)。:)

vwkv1x7d

vwkv1x7d5#

原因是您可能更改了“加密密钥”。如果您可以找到您在开始时创建的密钥,那么您仍然可以在您的(.js)文件中检查和使用此数据库。但是,“错误:验证码丢失(Mongoose加密)”并不代表你销毁了它。你仍然可以使用。试试看!

ws51t4hk

ws51t4hk6#

是,您应该尝试删除数据库一次,然后启动服务器老化。
有可能您在将加密“秘密”代码传输到.env文件时对其进行了一些更改。
别忘了在掉下去之前带上后援。

v8wbuo2f

v8wbuo2f7#

若要修复此错误,请删除尝试加密的集合(使用db.<collection-name>.drop()),然后重新创建它。
出现此错误是因为数据库中的某些数据未加密,而其余数据已加密。

j13ufse2

j13ufse28#

你的系统上没有激活MongoDB服务器端口27017。要激活它,只需在超级终端的另一个标签页中写入“mongod”命令。

相关问题