MongoDB findOne()需要一个变量

dba5bblo  于 2022-10-22  发布在  Go
关注(0)|答案(2)|浏览(199)

我的函数设置为查找来自/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>
tjvv9vkg

tjvv9vkg1#

不确定为什么要重定向到/data方法,而您已经有了要传递给视图的用户。
尝试在/login中直接重定向:

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) {
        res.render('pages/data.ejs', {users: data})
      } else {
        res.send({ 'Failed with': 'Wrong password!' });
      }
    } else {
      res.send({ 'Try again': 'Email not registered!' });
    }
  });
});

另外,我建议您使用bcrypt这样的库来散列存储在数据库中的密码。
以纯文本形式存储凭据是一种糟糕的安全做法。

1qczuiv0

1qczuiv02#

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

在{only_id:req.ession.id}之后存在语法错误,请正确地将‘)’替换为‘,’并关闭‘)’

相关问题