如何在 Expressjs 上捕获错误的用户名或密码?

How to catch wrong username or password on Expressjs?

我有一个 POST 路由,它接受用户名和密码,return 是成功登录时的令牌。如果用户名或密码为空,则 return 是一个错误。但是,如果我提供了错误的用户名或密码,我仍然会收到根据提供的信息生成的令牌。如何检查从数据库中 return 编辑到 return 相同的用户名或密码错误的信息?这是我的路线:

router.post('/login', (req, res) => {
    if (req.body.username == '' || req.body.password == '') {
        res.status(401).send({ error: "Wrong username or password" });
    } else {
        queries.login(req.body.username, req.body.password).then((user) => {
            if (res.error) {
                res.status(401).send({ error: 'Wrong username or password' });
            }
            res.json(auth.getToken(user.id, user.username));
        });
    }
});

这是我的查询:

    async login(username, password) {
        let getUser = await knex('users').where('username', username);
        let user = getUser[0];

        try {
            if (await argon.verify(user.password_hash, password)) {
                return user;
            }
        } catch (e) {
            return e;
        }
    }

在您的登录查询中,您需要针对错误情况抛出错误,例如:

async login(username, password) {
    try {
        let getUser = await knex('users').where('username', username);
        let user = getUser[0];

        if (await argon.verify(user.password_hash, password)) {
            return user;
        }

        throw Error('User not verified');
    } catch (e) {
        throw Error(e.message);
    }
}

然后在您的路线中,您可以使用 .catch():

处理错误情况
router.post('/login', (req, res) => {
    if (req.body.username == '' || req.body.password == '') {
        res.status(401).send({ error: "Wrong username or password" });
    } else {
        queries.login(req.body.username, req.body.password)
            .then((user) => {
                res.json(auth.getToken(user.id, user.username));
            });
            .catch((error) => {
                res.status(401).send({ error: 'Wrong username or password' });
            });
    }
});