async bcrypt post 请求 returns 无响应
async bcrypt post request returns no response
我正在尝试比较密码以登录用户,但我一直收到 "this request has no response."
这是我的 post 路线。
router.route("/login/:username1").post(async (req, res) => {
const userexist = User.find(username=>userexist.username=req.body.username1)
if(userexist == null)
{
return res.status(400).json("Cannot find user");
}
try
{
if(await bcrypt.compare(req.body.password, userexist.password))
{
res.json("success");
}
else
{
res.json("Not Allowed");
}
} catch {
res.status(500).json();
}
});
这是我的post登录页面方法。
onSubmit(e) {
e.preventDefault();
const isValid = this.validate();
const username1=this.state.username;
if (isValid) {
const user = {
username: this.state.username,
password: this.state.password,
};
axios
.post("http://localhost:5000/users/login/"+ username1, user)
.then((res) => console.log(res.data));
this.setState(initialState);
}
}
做一些更正,看看你的进展:
- 在控制器中使用 await
- 使用下面的代码行,您正在发送用户对象。所以在你的控制器中,使用 req.body.username (不是 req.body.username1)
axios.post("http://localhost:5000/users/login/"+ username1, user)
- 如代码片段所示
find
修正您的find
函数
- 还要检查您的 cors 并确保客户端遵守服务器 cors 规则
router.route("/login/:username1").post(async (req, res) => {
const userexist = await User.find(user=>user.username==req.body.username) //<---- make correction to find method ... use await and use correct req body object i.e. username not username1
if(userexist == null)
{
return res.status(400).json("Cannot find user");
}
try
{
if(await bcrypt.compare(req.body.password, userexist.password))
{
res.send("success"); //<----- as best practice, while sending strings just use res.send('success')... res.json is not reqd
}
else
{
res.send("Not Allowed"); //<----- for strings, it is better to use res.send instead of res.json
}
} catch {
res.status(500).json(); //<----- remember to pass meaningful error message back to client
}
});
只是切割任何人都有同样的问题。
问题是 user.password
它返回一个必须像这样访问的数组 user[0]['password']
它现在工作正常。我正在使用 React 路由器,我还通过我的 MongoDB models.js 模式使用的 .env 文件建立 MongoDB 连接。
User.find({ username: req.body.username }).then(async (user) => {
if( user.length>0) {
await bcrypt.compare(req.body.password, user[0]['password'],
function(err, result) {
if(result){
res.send('success') ;
}else{
res.send('not allowed') ;
}
});
}
我正在尝试比较密码以登录用户,但我一直收到 "this request has no response."
这是我的 post 路线。
router.route("/login/:username1").post(async (req, res) => {
const userexist = User.find(username=>userexist.username=req.body.username1)
if(userexist == null)
{
return res.status(400).json("Cannot find user");
}
try
{
if(await bcrypt.compare(req.body.password, userexist.password))
{
res.json("success");
}
else
{
res.json("Not Allowed");
}
} catch {
res.status(500).json();
}
});
这是我的post登录页面方法。
onSubmit(e) {
e.preventDefault();
const isValid = this.validate();
const username1=this.state.username;
if (isValid) {
const user = {
username: this.state.username,
password: this.state.password,
};
axios
.post("http://localhost:5000/users/login/"+ username1, user)
.then((res) => console.log(res.data));
this.setState(initialState);
}
}
做一些更正,看看你的进展:
- 在控制器中使用 await
- 使用下面的代码行,您正在发送用户对象。所以在你的控制器中,使用 req.body.username (不是 req.body.username1)
axios.post("http://localhost:5000/users/login/"+ username1, user)
- 如代码片段所示
find
修正您的find
函数 - 还要检查您的 cors 并确保客户端遵守服务器 cors 规则
router.route("/login/:username1").post(async (req, res) => {
const userexist = await User.find(user=>user.username==req.body.username) //<---- make correction to find method ... use await and use correct req body object i.e. username not username1
if(userexist == null)
{
return res.status(400).json("Cannot find user");
}
try
{
if(await bcrypt.compare(req.body.password, userexist.password))
{
res.send("success"); //<----- as best practice, while sending strings just use res.send('success')... res.json is not reqd
}
else
{
res.send("Not Allowed"); //<----- for strings, it is better to use res.send instead of res.json
}
} catch {
res.status(500).json(); //<----- remember to pass meaningful error message back to client
}
});
只是切割任何人都有同样的问题。
问题是 user.password
它返回一个必须像这样访问的数组 user[0]['password']
它现在工作正常。我正在使用 React 路由器,我还通过我的 MongoDB models.js 模式使用的 .env 文件建立 MongoDB 连接。
User.find({ username: req.body.username }).then(async (user) => {
if( user.length>0) {
await bcrypt.compare(req.body.password, user[0]['password'],
function(err, result) {
if(result){
res.send('success') ;
}else{
res.send('not allowed') ;
}
});
}