我正在尝试在mongodb中加密我的数据。我正在使用mongoose-encryption插件,但我有这样的错误:
“抛出新错误('必须提供options.secret或者两个选项.encryptionKey和options.signingKey');”
这是我的代码:
var UserSchema = new mongoose.Schema({
profile: ProfileSchema,
timeStamp: Date,
created: Date,
email: {
type: String,
sparse: true
},
username: {
type: String,
},
password: {
type: String,
}
})
var encKey = process.env.SOME_32BYTE_BASE64_STRING
var sigKey = process.env.SOME_64BYTE_BASE64_STRING
UserSchema.plugin(encrypt, { encryptionKey: encKey, signingKey: sigKey , encryptedFields: ['email']})
那么,我的代码中缺少什么?我不知道这个错误。因为我只是遵循here中的步骤但是失败了。我是节点和猫鼬的新手。请帮帮我......谢谢...
答案 0 :(得分:2)
您的原始错误是因为未设置process.env.SOME_32BYTE_BASE64_STRING
和process.env.SOME_64BYTE_BASE64_STRING
。
你的第二个错误是因为
var encKey = 'a2V5YWxpYXNpc3RoZWJlc3R3b3cqweda'
和var sigKey = 'a2V5YWxpYXNpc3RoZWJlc3R3b3cqwedaa2V5YWxpYXNpc3RoZWJlc3R3b3cqweda'
分别无效32BYTE_BASE64_STRING和64BYTE_BASE64_STRING。
要生成有效的字符串,可以使用crypto module:
//32 bytes
require('crypto').randomBytes(32, function(err, buffer) {
var token = buffer.toString('base64');
});
//64 bytes
require('crypto').randomBytes(64, function(err, buffer) {
var token = buffer.toString('base64');
});
答案 1 :(得分:0)
除了您的JavaScript文件之外,什么都不要与您创建的.env文件一起显示。
这对我有用。
答案 2 :(得分:0)
对于本地测试(不要提交git ),您需要传递一个变量:
var encKey = "Thisisa32bytebasestring";
var sigKey = "Thisisa64bytebasestring";
对于远程提交,您需要在SOME_32BYTE_BASE64_STRING
文件中为SOME_32BYTE_BASE64_STRING
和.env
传递一个String变量:
var encKey = process.env.SOME_32BYTE_BASE64_STRING
var sigKey = process.env.SOME_64BYTE_BASE64_STRING
您的.env
文件应包含:
SOME_32BYTE_BASE64_STRING=Thisisa32bytebasestring
SOME_64BYTE_BASE64_STRING=Thisisa64bytebasestring
答案 3 :(得分:0)
发生此错误是因为尚未安装npm的newList
软件包。
您应该首先安装.env
软件包,并在开始时在您的app.js中要求它
dotenv
npm install dotenv
现在,您可以在.env文件中自定义密钥了。
例如
require('dotenv').config();
答案 4 :(得分:0)
发生此错误是因为您尚未安装npm的.env软件包。 您应该首先安装dotenv软件包,并在开始时在您的app.js中要求它
答案 5 :(得分:0)
通过 npm 安装 dotenv :-
npm i dotenv
在 .js 文件中需要它:-
require('dotenv').config();
在您的项目文件夹中创建 .env 文件:-
在 .env 文件中粘贴以下文本:-
SOME_LONG_UNGUESSABLE_STRING=Thisisa32bytebasestring
在 mongoose.model() 上方的 .js 文件中编写以下代码,并用您的项目替换 encryptingItem :-
var secret = process.env.SOME_LONG_UNGUESSABLE_STRING;
userSchema.plugin(encrypt, { secret: secret , encryptedFields: ['encryptingItem']});