我的函数设置为查找来自/LOGIN POST方法的电子邮件,但我未能正确声明变量,要插入到app.get(‘/data’)上的findOne表单中的变量是什么?
我有:
app.post('/login', function (req, res) {
//console.log(req.body);
const uri = "mongodb+srv://<PRIVATE INFO>.eapnyil.mongodb.net/?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 });
const users = client.db("data").collection("users");
users.findOne({email:req.body.email},function(err,data){
if(data){
if(data.password==req.body.password){
//console.log("Logged In.");
console.log('Email in DB is: ' + data.email);
console.log('Email in form is: ' + req.body.email);
//res.send({"Success":"Success!"});
res.redirect('/data');
}else{
res.send({"Failed with":"Wrong password!"});
}
}else{
res.send({"Try again":"Email not registered!"});
}
});
});
app.get('/data', (req, res) => {
const users = client.db("data").collection("users");
users.findOne({unique_id:req.session.id})((err, result) => {
if (err) return console.log(err)
// renders index.ejs
res.render('pages/data.ejs', {users: result})
})
});
并在login.ejs文件中显示以下内容:
<p>Login</p>
</div>
<div class="form-group">
<form id="form" method="POST" action="/login">
<input type="text" name="email" placeholder="E-mail" required="" class="form-control"><br/>
<input type="password" name="password" placeholder="Password" required="" class="form-control"><br/>
<input type="submit" value="Login" class="btn btn-success">
</form>
</div>
2条答案
按热度按时间tjvv9vkg1#
不确定为什么要重定向到
/data
方法,而您已经有了要传递给视图的用户。尝试在
/login
中直接重定向:另外,我建议您使用
bcrypt
这样的库来散列存储在数据库中的密码。以纯文本形式存储凭据是一种糟糕的安全做法。
1qczuiv02#
在{only_id:req.ession.id}之后存在语法错误,请正确地将‘)’替换为‘,’并关闭‘)’