javascript - 登录系统 - Node.js 和 Redis

标签 javascript node.js redis node-redis

<分区>

我想使用 node.js 和 Redis(Redis 包)创建登录系统,但每次我将输入数据与数据库数据进行比较时,我都会得到一个令人困惑的结果。这是第一种方法:

const Redis = require("redis");
const client = Redis.createClient();
exports.userLogin = (username, password, errMsg, successMsg, res) => {
  client.keys("user*", (err, replies) => {
    let isFound = false;
    for (let i = 0; i < replies.length; i++) {
      client.hgetall(replies[i], (err, value) => {
        if (value.user === username && value.password === password) {
          isFound = true;
        }
      }); 
    }
    console.log(isFound);
    if (isFound) {
      successMsg(username, res);
    } else {
      errMsg(res);
    }
  })
)}

即使登录名和密码没问题,我也一直报错,而且它不执行 errMsg 函数 Example 1 第二个例子:

exports.userLogin = (username, password, errMsg, successMsg, res) => {
    client.keys("user*", (err, replies) => {
        for (let i = 0; i < replies.length; i++) {
          client.hgetall(replies[i], (err, value) => {
            if (value.user === username && value.password === password) {
              successMsg(username, res);
            } else {
              console.log("length: ", replies.length - 1);
              console.log("i: ", i);
              if(replies[i] === replies.length - 1) {
                errMsg(res);
              } else {
                console.log("else statement: ", replies[i] === replies.length - 1);
                return true;
              }
            }
          });
        }
      })
)}

Example 2

如果密码和登录名正确,它会工作,但如果它们不正确,则不会,因为页面正在加载某些内容并且不执行 errMsg 函数。你有什么想法吗?

最佳答案

如果可以,将使用 redis 更改为更适合存储用户的东西。

否则,改变数据在redis中的存储方式。你不想阅读所有用户并像那样循环他们。让数据库查询尽可能多地处理。也许一种方法是让用户名成为 key 的一部分,这样您就可以直接查找正确的用户,然后从那里检查密码。

不要忘记存储密码和处理登录的安全部分。如果需要安全,考虑对密码进行哈希处理并添加密码盐。

关于javascript - 登录系统 - Node.js 和 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804364/

相关文章:

javascript - 单击后仅添加一次新元素并将其保存到本地存储 html javascript

javascript - 如何在 Django 应用程序中的 Javascript、Python 和 CSS 之间共享配置数据?

javascript - 使用 webpack 将所有 js 文件构建到目标文件夹

javascript - 通过 socket.io 与 heroku 应用程序进行通信

javascript - 有没有一种优雅的方式将 npm run 选项传递给 grunt 选项

asynchronous - 在实时 Web 应用程序中处理服务器响应的上下文

node.js - 如何获取redis中的所有用户

javascript - 使用 Rails UJS "remote: true"ajax 链接时如何获取单击的对象?

mysql - 解析字符串化 JSON 字符串时出错

javascript - 生成具有易于区分的类型/组的实体 ID