节点js Mongoose使用mongoose-encryption

时间:2016-03-29 11:31:42

标签: node.js mongoose

我正在尝试在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中的步骤但是失败了。我是节点和猫鼬的新手。请帮帮我......谢谢...

6 个答案:

答案 0 :(得分:2)

您的原始错误是因为未设置process.env.SOME_32BYTE_BASE64_STRINGprocess.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中要求它

  1. dotenv
  2. npm install dotenv

现在,您可以在.env文件中自定义密钥了。

例如

require('dotenv').config();

答案 4 :(得分:0)

发生此错误是因为您尚未安装npm的.env软件包。 您应该首先安装dotenv软件包,并在开始时在您的app.js中要求它

  1. npm install dotenv //在终端中
  2. require('dotenv')。config(); // app.js的顶部

答案 5 :(得分:0)

  1. 通过 npm 安装 dotenv :-

    npm i dotenv
    
  2. 在 .js 文件中需要它:-

    require('dotenv').config();
    
  3. 在您的项目文件夹中创建 .env 文件:-

  4. 在 .env 文件中粘贴以下文本:-

    SOME_LONG_UNGUESSABLE_STRING=Thisisa32bytebasestring
    
  5. 在 mongoose.model() 上方的 .js 文件中编写以下代码,并用您的项目替换 encryptingItem :-

    var secret = process.env.SOME_LONG_UNGUESSABLE_STRING;
    userSchema.plugin(encrypt, { secret: secret ,  encryptedFields: ['encryptingItem']});