提问者:小点点

User.Findone返回null


router.post("/login", async (req, res) => 
{
        try
        {
            console.log(req.body.email)
            const user = await User.findOne({email: req.body.email, password: req.body.password})
            if(user)
            {
                return res.redirect("/")
            }
            console.log(user)
            res.status(200).send(user)
        }
        catch(e)
        {
            res.status(400).send(e)
        }
})

我试图在MongoDB中查找用户,但是用户变量返回NULL,并且我得到的状态代码为200,对象为空。

谢谢你的回答。 我找到了缺失的点。 我将散列密码存储在数据库中,但我忘记搜索散列密码


共2个答案

匿名用户

首先,您应该考虑不要将密码作为明文存储在您的数据库中,以及在发现用户查询它们时。 我建议使用散列算法(如bcrypt)来验证它们。

关于您的问题,您必须知道,mongoose不会抛出一个错误时,它没有找到条目,您只发送404时,一个错误抛出。 我建议您将代码更改为以下内容:

router.post("/login", async (req, res) => 
{
        try
        {
            console.log(req.body.email)
            const user = await User.findOne({email: req.body.email})

            if (user) {
                // TODO: Use hashing algorithm to verify password
                console.log(user)
                res.status(200).send(user)
                return res.redirect("/")
            } else {
                res.status(400).send("User not found")
            }
            
        }
        catch(e)
        {
            res.status(500).send("Server error: " + e.message)
        }
})

匿名用户

这与查询不匹配。 您确定电子邮件和密码正确吗? 语法是正确的。 它显示状态代码200,这意味着你的代码是完美的,但你的电子邮件公关密码是错误的或数据库中没有数据与该电子邮件和密码。 就像@adwirawien说你应该散列你的密码。