Как поймать неправильный логин или пароль на Expressjs? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть POST-маршрут, который принимает имя пользователя и пароль и возвращает токен при успешном входе в систему. Если имя пользователя или пароль не указаны, возвращается ошибка. Однако, если я введу неправильное имя пользователя или пароль, я все равно получаю токен, сгенерированный из предоставленной информации. Как я могу проверить информацию, возвращаемую из базы данных, чтобы вернуть ту же самую ошибку имени пользователя или пароля? Это мой маршрут:

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;
        }
    }

1 Ответ

1 голос
/ 10 апреля 2020

В вашем запросе на вход в систему вам нужно выдать ошибку для случая ошибки, например:

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' });
            });
    }
});
...