首页 > 解决方案 > 如果我输入了错误的密码,那么它只会带我到下一条路线而不保存用户

问题描述

我正在创建虚拟 Netflix 站点,但在注册页面中,我想保存不在数据库中的用户,如果用户存在于数据库中,则转到下一条路线。但是如果输入的电子邮件和输入的密码不匹配,那么我只想显示错误文本。但是,如果我输入了错误的密码,那么它只会将我带到下一条路线而不保存用户。我只是不明白那里发生了什么。这是我的 app.js 注册路线


app.get("/signup", (req, res) => {
   Netflix.find({}, function (err, user) {
       res.render("Signup", { email: app.get('data'), Users: user });
   });

});

app.post("/signup", (req, res) => {
   const User = new Netflix({
       email: app.get('data'),
       password: req.body.password
   });
   Netflix.findOne({ "email": app.get('data') }, { "password": req.body.password }, function (err, user) {
       if(user){
           res.redirect("/Netflix/Movies");
       }
       else{
           User.save((err)=>{
               if(err){
                   res.send(err);
               }
               else{
                   res.redirect("/Netflix/Movies");
               }
           });
           
       }

   });
});

这是 signup.ejs 文件。

  <body>

        <section class="section">
            <div class="container3">
                <header>
                    <div class="logo">
                        <img src="/image/Netflix_Logo_RGB.png" alt="Netflix logo"></img>
                    </div>
                    <a href="/signin">Sign In</a>
                    <div class="hr"></div>
                </header>
                <div id="error-text">
                    <i class="fas fa-exclamation-triangle"></i>
                    <p> <span>Incorrect password.</span>
                        Please try again or you can reset your password.</p>
                </div>
                <div class="containt">
                    <h3>
                        Welcome back, <%- email.substring(0, email.indexOf('@')); %>!<br>
                            Rejoining Netflix is easy.
                    </h3>
                    <p>Enter your password and you'll be watching in no time.<br></p>
                    <p class="main">
                        Email<br>
                        <span>
                           <%= email %>
                        </span>
                    </p>
                    <form class="continue" action="/signup" method="POST">
                        <input id="password" type="password" placeholder="Enter your password" name="password">
                        <p class="forgot">Forgot your password?</p>
                        <button onclick="check()">Continue</button>
                    </form>
                </div>
            </div>

        </section>
        <script type="text/javascript">

            function check(){
                let Users = <%- JSON.stringify(Users) %>;
                console.log("hello");
                Users.forEach(element => {
                    var enteredEmail = <%- JSON.stringify(email) %>;
                    var enteredPassword = document.getElementById("password").value;
                    if(element.email === enteredEmail && element.password === enteredPassword){
                        document.getElementById("error-text").style.display = "none";
                    }
                    else{
                        document.getElementById("error-text").style.display = "block";
                        document.getElementsByClassName("containt").style.top = "270";
                    }
                });
            }



        </script>
</body>

标签: javascriptnode.jsexpressejs

解决方案


您的 findOne 未正确实现(findone 将一个对象作为参数),因此您将 user 作为{} 空对象并且是真实值

你也可能想findOne这样写

Netflix.findOne({ "email": app.get('data'), "password": req.body.password }, function (err, user) {


推荐阅读