【问题标题】:Node js input values in text file文本文件中的节点js输入值
【发布时间】:2019-02-27 00:23:25
【问题描述】:

我想知道如何比较从用户输入接收的值与存储在 Node.js 中的 file.txt 中的值。

更新:我不需要以纯文本形式存储密码。该文本文件仅用于验证管理员凭据。这意味着凭据可以通过文本文件更改,并且管理员必须知道凭据才能登录。这可能没有意义,但它是用于学习目的。

【问题讨论】:

  • 听起来您正计划以纯文本形式存储密码。您应该存储密码的加盐哈希,而不是纯文本。
  • 不,我不需要以纯文本形式存储密码。该文本文件仅用于验证管理员凭据。这意味着凭据可以通过文本文件进行更改,并且管理员必须知道凭据才能登录。这可能没有意义,但它是出于学习目的。
  • 您的示例文本文件看起来确实包含电子邮件admin@admin.com 和密码admin。您所说的 Nguyễn Việt Đức 的答案是“真棒”,它以纯文本形式从文件中读取密码。你是对的,到目前为止这对我来说没有意义。

标签: node.js command-line-interface user-input readline file-management


【解决方案1】:

为了您的学习目的,只需比较字符串即可。如果您的userInputPassword 是纯文本格式并且存储在admin.txt 中的密码是经过哈希处理的,那么您必须在比较之前解密您在admin.txt 中的密码。

const fs = require('fs');
const readline = require('readline').createInterface({
 input: process.stdin,
 output: process.stdout
});
const read = fs.readFileSync('admin.txt', 'utf8');
console.log(read);
readline.question(`What's your email? `, (email) => {
 const userInputEmail = email.trim();
 console.log(`Email: ${email}`)
   readline.question(`What's your password? `, (password) => {
     const userInputPassword = password.trim();
     console.log(`Password: ${password}`);
     const [correctEmail, correctPassword] = read.split('\n').map(s => s.trim());
     if (userInputEmail === correctEmail && userInputPassword === correctPassword) console.log('Logged in');
     else console.log('Email or password is incorrect');
     readline.close();
   });
});

【讨论】:

  • 太棒了。这对我来说有点困惑,但现在看起来很棒。那么,如果凭据正确,我该怎么做呢?我的 cli 应用程序会继续执行其他一些过程,例如为管理员显示菜单选项?例如让它有 4 个选项可供选择。我应该与询问者或其他任何人一起做吗?非常感谢您的帮助。谢谢
  • 对于命令行应用程序,我建议使用像 commander 这样的库,而不是尝试自己创建它,因为您必须将许多回调嵌套在一起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 2016-08-19
  • 1970-01-01
  • 2018-09-23
  • 2018-03-24
  • 2014-09-11
相关资源
最近更新 更多