如何在 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' });
});
}
});
我有一个 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' });
});
}
});