Express 如何修复阻止注册用户登录的passport本地身份验证错误

Express 如何修复阻止注册用户登录的passport本地身份验证错误,express,mongoose,passport.js,ejs,passport-local,Express,Mongoose,Passport.js,Ejs,Passport Local,我花了一些时间试图弄明白为什么我的passport本地身份验证代码不能正常工作,但我没有 我能做到。该程序有用户名字段和密码字段。这样人们就可以用他们的用户名和密码注册。守则中的问题在于 在登录部分。如果我使用任何注册用户名和密码登录,浏览器将显示未找到的数据,而不是显示 重定向页面的内容。请问,是什么导致了这个错误。该程序的代码如下所示 验证架构文件: const mongoose = require("mongoose"); const passportLocalMon

我花了一些时间试图弄明白为什么我的passport本地身份验证代码不能正常工作,但我没有 我能做到。该程序有用户名字段和密码字段。这样人们就可以用他们的用户名和密码注册。守则中的问题在于 在登录部分。如果我使用任何注册用户名和密码登录,浏览器将显示未找到的数据,而不是显示 重定向页面的内容。请问,是什么导致了这个错误。该程序的代码如下所示

验证架构文件:


const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");
    
const userSchema = mongoose.Schema({
    username: {
    type: String,
    required: true
    },
    password: String,
});

userSchema.plugin(passportLocalMongoose);
    
const User = mongoose.model("User", userSchema);
module.exports = User;

设置

验证路由:

router.get("/new", isLoggedIn, (req, res) => {
   console.log(req.params)
   res.render("new", {post: new Post()});
})

router.get("/register", async(req, res)=>{
   res.render("register");
})

router.post("/register", function(req, res){
   req.body.username
   req.body.password
   var newUser = new User ({username: req.body.username})
   User.register(newUser, req.body.password, function (err, user){
      if(err){
         console.log(err)
         return res.render("register")
      }
      passport.authenticate("local")(req, res, function(){
         res.redirect("login");
      })
   })
})

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

router.post("/login", passport.authenticate("local", {
   successRedirect: "new",
   failureRedirect: "login",
}), (req, res, next)=>{

})
router.get("/logout", (req, res)=>{
   req.logout();
   res.redirect("login")
})
function isLoggedIn(req, res, next){
   if(req.isAuthenticated()){
      return next
   }
   res.redirect("login")
}
登录模板文件
(Login.ejs)


登录
用户名
密码
提交

过了一段时间,我终于找到了当注册用户尝试登录时浏览器显示未找到数据的原因。问题来自米德尔瓦雷。由于failureRedirect工作正常,问题来自Middleware的下一个方法。应该是:

function isLoggedIn(req, res, next){
   if(req.isAuthenticated()){
      return next()
   }
   res.redirect("login")
}

当忽略返回的下一个函数结尾处的父项时,就会发生此问题。因此,它应该是
return next()
而不是
return next

经过一段时间后,我已经能够找出当注册用户尝试登录时浏览器显示未找到数据的原因。问题来自米德尔瓦雷。由于failureRedirect工作正常,问题来自Middleware的下一个方法。应该是:

function isLoggedIn(req, res, next){
   if(req.isAuthenticated()){
      return next()
   }
   res.redirect("login")
}
当忽略返回的下一个函数结尾处的父项时,就会发生此问题。因此,它应该是
returnnext()
而不是
returnnext

function isLoggedIn(req, res, next){
   if(req.isAuthenticated()){
      return next()
   }
   res.redirect("login")
}