最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何使用nodejs和express进行基于令牌的身份验证来正确地进行虚拟用户登录

运维笔记admin8浏览0评论

如何使用nodejs和express进行基于令牌的身份验证来正确地进行虚拟用户登录

如何使用nodejs和express进行基于令牌的身份验证来正确地进行虚拟用户登录

我对Web开发非常陌生,一直使用this Udemy课程作为指南和Google。我必须创建一个“虚拟用户”才能登录我的网站,并且我的项目说我无法使用注册来创建用户。

[我所做的是使用Robo 3T使用Mongo在userDB上手动输入用户名和密码。该登录名有效,但是如果我输入的错误登录名与数据库中的登录名不匹配,则该网站将卡住并继续尝试“加载”。我也对如何进行基于令牌的登录身份验证感到困惑,并且希望获得更多指导,我正在关注的指南是有关数据库加密和Google的OAuth 2.0。

login.ejs

     <!-- Makes POST request to /login route -->
        <form action="/login" method="POST">
            <div class="form-group">
              <label for="username">Username</label>
              <input type="text" class="form-control" name="username">
            </div>
            <div class="form-group">
              <label for="password">Password</label>
              <input type="password" class="form-control" name="password">
            </div>
            <button type="submit" class="btn btn-dark">Login</button>
          </form>

app.js

//connect to mongodb
mongoose.connect("mongodb://localhost:27017/userDB",{useNewUrlParser: true});

const userSchema = {
  username: String,
  password: String
};

const User = new mongoose.model("User", userSchema);

app.get("/",function(req,res){
  res.render("home"); //render home.ejs
});

app.get("/login",function(req,res){
  res.render("login"); //render login.ejs
});

app.post("/login", function(req,res){
    const username = req.body.username;
    const password = req.body.password;

    User.findOne({username: username}, function(err, foundUser){
      if (err){
        console.log(err);
        res.redirect("/login");
      } else{
        if (foundUser){
          if (foundUser.password === password){
            res.redirect("counter");
          }
        }
      }
    });
});

如果该用户使用我创建的一个虚拟用户中没有的用户名和密码登录,我只希望它给出一个错误(也许是一个弹出窗口?),然后重新加载回login.ejs。

谢谢您的帮助!

回答如下:

问题可能是foundUser为空或密码不匹配时,您没有返回任何内容。

[如果有任何错误,您可以使用查询参数(err)将其重定向到/login路由,客户端可以在页面加载时使用JS读取该参数。如果存在非空查询参数err,则将其读取并在某些弹出窗口中显示。

res.redirect("/login?err=The username does not exist");

//connect to mongodb
mongoose.connect("mongodb://localhost:27017/userDB", {
    useNewUrlParser: true
});

const userSchema = {
    username: String,
    password: String
};

const User = new mongoose.model("User", userSchema);

app.get("/", function(req, res) {
    res.render("home"); //render home.ejs
});

app.get("/login", function(req, res) {
    res.render("login"); //render login.ejs
});

app.post("/login", function(req, res) {
    const username = req.body.username;
    const password = req.body.password;

    try {
        User.findOne({
            username: username
        }, function(err, foundUser) {
            if (err || !foundUser) {
                return res.redirect("/login?err=The username does not exist");
            }
            if (foundUser.password !== password) {
                // you can use  bcryptjs for hashing and comparing hashed values.

                return res.redirect("/login?err=The username or password is invalid");
            }
            res.redirect("/counter");
        });
    } catch (error) {
       res.redirect("/login?err=something went wrong!");
    }
});

发布评论

评论列表(0)

  1. 暂无评论