gpt4 book ai didi

node.js - pw哈希比较nodejs

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:18 24 4
gpt4 key购买 nike

我正在尝试使用 bcrypt 模块比较我的登录系统的密码,但它似乎不起作用。一旦我将数据提交到表单中,我就会得到 {"message":"Internal Server Error"} (我已定义)。我做错了什么?

这是 auth-controller.js:

var mysqlConnection = require ('../config');
const bcrypt = require ('bcrypt');

module.exports.auth = async function (req, res) {
var password = req.body.password
var email = req.body.email
console.log(email, password);

let pwComparison

try {
//Check the password
pwComparison = await pwCompare(password)

//Compare the hashed password
password = await bcrypt.compare(password,results)

} catch (e) {
return res.status(500).json({message: 'Internal Server Error'})
}

if (pwComparison) {
res.redirect('/')
}

async function pwCompare(password) {

let query = `SELECT password FROM users where password = ${password}`

return new Promise((resolve,reject)=> {
mysqlConnection.query(query, function(error,results) {
if (error) {
return reject (error)
}

return resolve(results)
})
})
}}

最佳答案

您不应该查询密码,而应该查询用户。您的数据库中的密码可能是加密的,因此来自客户端的值永远不会匹配。我猜您正在尝试将 null 与字符串进行比较,这可能是您的错误的来源。但是,记录错误对您很有帮助,因此您肯定会知道。

尝试这个:

module.exports.auth = async function (req, res) { 
const password = req.body.password
const email = req.body.email
console.log(email);

let user = null;
let isMatch = false;

try {
//Check the password
user = await getUserByEmail(email)

//Compare the hashed password
isMatch = await bcrypt.compare(password, user.password)

} catch (e) {
return res.status(500).json({message: 'Internal Server Error'})
}

if (isMatch) {
req.user = user;
res.redirect('/');
}

async function getUserByEmail(email) {

let query = "SELECT password FROM users where email = ? LIMIT 1";

return new Promise((resolve,reject)=> {
mysqlConnection.query(query, [email], function(error,results) {
if (error) {
return reject (error)
}
if (results.length == 1)
return resolve(results[0])
else
return resolve(null)
});
})
}}

根据您的评论进行更新。

好的,我错过了查询;您正在返回与查询匹配的用户数组,这意味着只是一个数组。在任何情况下,您都需要从该数组中获取实际用户。

我更新了查询以将搜索限制为单个用户(小的性能奖励,即使您只有唯一的电子邮件地址),以及您的查询回调以返回单个返回的行而不是数组。有人可能会争辩说找不到用户应该是 reject()我把这个决定留给你,而不是一个空结果。

关于node.js - pw哈希比较nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com