javascript - 如何解决错误的请求
问题描述
我正在尝试在后端使用 b crypt 来比较加密的密码,但我不断收到无效密码,即使这样仍然让我在这里是我的后端代码...
router.post('/login', function (req, res) {
const {
userName = req.body.userName,
password = req.body.password,
} = req.query;
connection.query(
SELECT_USER_QUERY + ' WHERE username = ? ',
[userName],
function (error, results, fields) {
if (error) throw error;
else {
if (results.length > 0) {
bcrypt.compare(password, results[0].password, function (err, result) {
if (result) {
return res.send({ message: 'Login Successful' });
} else {
return res.status(400).send({ message: 'Invalid Password' });
}
});
} else {
return res.status(400).send({ message: 'Invalid userName' });
}
}
}
);
});
我的查询看起来像这样......
const SELECT_USER_QUERY = 'SELECT id, firstName, lastName, userName,' +
' password, email FROM users';
这就是我所说的......
handleLogIn = () => {
const { userName } = this.state.user;
const { users } = this.state;
postFetch(`/users/login`, {
id: users.find((user) => user.userName === userName).id,
firstName: users.find((user) => user.userName === userName)
.firstName,
lastName: users.find((user) => user.userName === userName).lastName,
userName: users.find((user) => user.userName === userName).userName,
password: users.find((user) => user.userName === userName).password,
email: users.find((user) => user.userName === userName).email
})
.then(
this.setState({
user: {
...this.state.user,
id: users.find((user) => user.userName === userName).id,
firstName: users.find((user) => user.userName === userName)
.firstName,
lastName: users.find((user) => user.userName === userName).lastName,
userName: users.find((user) => user.userName === userName).userName,
password: users.find((user) => user.userName === userName).password,
email: users.find((user) => user.userName === userName).email,
},
}),
this.getPreference(users.find((user) => user.userName === userName).id),
this.getReadings(users.find((user) => user.userName === userName).id)
)
.catch((err) => console.log(err));
};
我使用 b crypt 在我的添加路线中散列一个加盐密码我试图添加它但它不会让我请任何帮助将不胜感激
解决方案
我相信问题在于你在哪里解构你的userName
和password
变量。你目前有这个:
const {
userName = req.body.userName,
password = req.body.password,
} = req.query;
这是一个有点混合的比喻。您应该像这样单独分配变量:
const userName = req.body.userName;
const password = req.body.password;
或者像这样解构它们:
const {
userName,
password
} = req.query;
您没有指定您正在使用什么类型的后端,但从router.post
第一行开始,我假设您正在接收一个帖子。在这种情况下,我希望用户名和密码位于req.post
. 但是,当我在 jsfiddle 中尝试您的原始代码时,我从req.query
.
您提到您在浏览器控制台中看到 400,我看到您的服务器代码在用户名或密码无效时返回 400 响应。所以我认为问题在于您的服务器代码没有正确解构请求,userName
andpassword
变量为空,因此验证失败。
所以正确的代码是:
const userName = req.body.userName;
const password = req.body.password;
或者:
const {
userName,
password
} = req.body;
推荐阅读
- typescript - 在 Jest 单元测试中使用 async/await 会在 PhpStorm(或任何 JetBrains IDE)中引发错误
- python - 检查列表中是否存在任何项目(python)
- java - 我在java中看不到例如“char”的默认值
- c# - 为什么控制台应用程序中没有捕获默认的 SynchronizationContext?
- wpf - WPF 中的多窗口行为和调度程序
- bash - 如何比较cpu序列是否正确
- node.js - 将值从一个按钮发送到另一个按钮快速车把?
- swift - UITableView Swift中带有布尔值的切换按钮
- request - 如何获取jmeter中任何侦听器中每个线程的请求发送日期/时间和接收响应
- c - 在C中的循环中增加整数指针