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

Posted

技术标签:

【中文标题】nodejs - 将帐户信息保存在 .env 文件或客户端数据库中【英文标题】:nodejs - save account information inside .env file or in client side database 【发布时间】:2021-07-29 02:53:36 【问题描述】:

我创建了一个简单的 nodejs 应用程序,它将使用 express 来执行一些文件处理操作。我将使用pkg 打包最终的应用程序,这意味着该应用程序将以只读模式访问打包的资源。既然我想实现登录系统和一次性帐户创建,那么最好的方法是什么?该应用程序将打开一个浏览器选项卡,该选项卡将为 UI 运行 vuejs 应用程序。我正在考虑通过在 vue 应用程序中实现它来使用nedb-promises,但存储在其中的数据可供所有人访问,因此登录将变得不安全。有没有办法加密/解密 nedb-promises 中存储的数据?

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

【问题讨论】:

【参考方案1】:

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 文件中的随机生成的字符串

【讨论】:

以上是关于nodejs - 将帐户信息保存在 .env 文件或客户端数据库中的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS、NodeJS:将数据保存到 Json 文件或数据库

如何从 Python 上的保存文件 (N:\userFile) 中获取信息(帐户名)

将文件添加到我的应用程序以跟踪帐户详细信息

NodeJS 无法识别 .env 文件

通过.ENV文件来配置ThinkPHP的数据库连接信息

使用 Python 和 dotenv 更改保存在 .env 文件中的环境变量