nodejs - 将帐户信息保存在 .env 文件或客户端数据库中

nodejs - save account information inside .env file or in client side database

我创建了一个简单的 nodejs 应用程序,它将使用 express 执行一些文件处理操作。我将通过在 vue 应用程序中实现它来使用 pkg this mean that the app will access the packaged resources in readonly mode. Since I want to implement a login system and a one time account creation, what's the best way to proceed? The app will open a browser tab that will run the a vuejs app for the UI. I'm thinking to use nedb-promises 打包最终应用程序,但存储在其中的数据可供所有人访问,因此登录将变得不安全。有没有办法 encrypt/decrypt 在 nedb-promises 中存储数据?

我想使用的另一种解决方案是 运行 一次性创建帐户并将创建的帐户信息存储在 .env 文件中,该文件将在应用程序所在的文件夹中创建将运行。使用这种方法,我如何散列密码和帐户数据,以及在启动应用程序时使用用户将输入的凭据检查它们?

NeDB 有两个函数 beforeDeserializationafterSerialization。这些可用于在使用 crypto 模块从数据库读取和写入数据时加密和解密数据。

const crypto    = require('crypto');
const Datastore = require('nedb-promises');

const ALGORITHM = 'aes-256-cbc'
const BLOCK_SIZE = 16
const SECRET = 'SECRET'

const database = new Datastore({
    filename: 'database.db', 
    autoload: true,
    afterSerialization (plaintext) {
        // Encryption

        const iv = crypto.randomBytes(BLOCK_SIZE);
        const cipher = crypto.createCipheriv(ALGORITHM, SECRET, iv);
        const ciphertext = Buffer.concat([iv, cipher.update(plaintext), cipher.final()]);
        return ciphertext.toString('base64');
    },
    beforeDeserialization (ciphertext) {
        // Decryption

        const ciphertextBytes = Buffer.from(ciphertext, 'base64');
        const iv = ciphertextBytes.slice(0, BLOCK_SIZE);
        const data = ciphertextBytes.slice(BLOCK_SIZE);
        const decipher = crypto.createDecipheriv(ALGORITHM, SECRET, iv);
        const plaintextBytes = Buffer.concat([decipher.update(data), decipher.final()]);
        return plaintextBytes.toString('utf8');
    },
});

您可能希望 SECRET 变量是存储在 .env 文件中的随机生成的字符串