登录系统 - Node.js 和 Redis
Login system - Node.js and 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 函数
第二个例子:
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;
}
}
});
}
})
)}
如果密码和登录名正确,它会工作,但如果它们不正确,则不会,因为页面正在加载某些内容并且不执行 errMsg 函数。你有什么想法吗?
如果可以,将使用 redis 更改为更适合存储用户的内容。
否则,更改数据在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 函数
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;
}
}
});
}
})
)}
如果密码和登录名正确,它会工作,但如果它们不正确,则不会,因为页面正在加载某些内容并且不执行 errMsg 函数。你有什么想法吗?
如果可以,将使用 redis 更改为更适合存储用户的内容。
否则,更改数据在redis中的存储方式。你不想阅读所有用户并像那样循环他们。让数据库查询尽可能多地处理。也许一种方法是让用户名成为密钥的一部分,这样您就可以直接查找正确的用户,然后从那里检查密码。
不要忘记存储密码和处理登录的安全部分。如果需要安全,请考虑对密码进行哈希处理并添加密码盐。