节点js Mongoose使用mongoose加密对数据进行加密

mitkmikd  于 2023-01-26  发布在  Go
关注(0)|答案(9)|浏览(180)

我尝试在mongodb中加密我的数据。我使用mongoose-encryption插件,但是我遇到了这样的错误:
"抛出新错误('必须提供选项. secret或选项. encryptionKey和选项. 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但失败。我是新的节点和 Mongoose 。请帮助我...谢谢无论如何...

yjghlzjz

yjghlzjz1#

您最初的错误是因为process.env.SOME_32BYTE_BASE64_STRINGprocess.env.SOME_64BYTE_BASE64_STRING未设置。
第二个错误是因为var encKey = 'a2V5YWxpYXNpc3RoZWJlc3R3b3cqweda'var sigKey = 'a2V5YWxpYXNpc3RoZWJlc3R3b3cqwedaa2V5YWxpYXNpc3RoZWJlc3R3b3cqweda'
分别为无效的32字节_BASE64字符串和64字节_BASE64字符串。
要生成有效的字符串,可以使用crypto模块:

//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');
});
wribegjk

wribegjk2#

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

  1. npm install dotenv
  2. require('dotenv').config();
    现在您可以在.env文件中自定义密钥。
    例如
require("dotenv").config();
const { ApolloServer, gql } = require("apollo-server");
jdg4fx2g

jdg4fx2g3#

除了你的javascript文件应该与你创建的. env文件一起呈现。
这对我很有效。

uyto3xhc

uyto3xhc4#

对于本地测试(不要提交到git),你需要传入一个变量:

var encKey = "Thisisa32bytebasestring";
var sigKey = "Thisisa64bytebasestring";

对于远程提交,您需要在.env文件中为SOME_32BYTE_BASE64_STRINGSOME_32BYTE_BASE64_STRING传递一个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
brqmpdu1

brqmpdu15#

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

  1. npm安装dotenv // in终端
    1.配置文件();//应用程序的顶部
gcxthw6b

gcxthw6b6#

1.通过npm安装dotenv:-

npm i dotenv

1.在.js文件中需要它:-

require('dotenv').config();

1.创建.env文件在你的项目文件夹:-
1.将下面的文本粘贴到.env文件中:-

SOME_LONG_UNGUESSABLE_STRING=Thisisa32bytebasestring

1.在mongoose.model()上方的.js文件中写入以下代码,并将encryptingItem与您的项目放在一起:-

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

zpjtge227#

检查所需的名称变量:它应该是这样的:

const encrypt = require("mongoose-encryption");

以便与名称匹配:

userSchema.plugin(encrypt, { secret: secret });

你的constencrypt名称应该与userSchema匹配。plugin(encrypt,{}..)在这里我希望它能有所帮助。

j5fpnvbx

j5fpnvbx8#

您可以使用名为secret = "set it to any string you want"的变量,然后将{secret:secret}添加到UserSchema.plugin();
您可以在mongoose-encryption软件包文档中找到此文档

pbwdgjma

pbwdgjma9#

在.env文件中,确保SOME_32BYTE_BASE64_STRING和SOME_64BYTE_BASE64_STRING的值括在“”内,例如SOME_32BYTE_BASE64_STRING="ThisIsMyLittlesecret"

相关问题