Node.js 如何使用passport.js为不同类型的用户应用身份验证

Node.js 如何使用passport.js为不同类型的用户应用身份验证,node.js,mongodb,authentication,passport.js,passport-local,Node.js,Mongodb,Authentication,Passport.js,Passport Local,我正在应用程序中使用passport.js进行身份验证(本地)。我有两种类型的用户-用户和管理员。两者都插上了当地猫鼬的护照。用户的身份验证工作正常。然后我对管理员应用了相同的身份验证过程 在将身份验证代码添加到Admin之前工作正常的用户也无法工作。它不会重定向到管理仪表板,而是在注册管理的过程中显示未经授权的 我发现了一个与我完全相似的问题。我尝试了那里给出的解决方案,但情况变得更糟。我的整个应用程序崩溃,并显示出一些策略。身份验证不是一个功能错误 那么,为什么会显示此错误?我如何在同一个应

我正在应用程序中使用passport.js进行身份验证(本地)。我有两种类型的用户-用户管理员。两者都插上了当地猫鼬的护照。用户的身份验证工作正常。然后我对管理员应用了相同的身份验证过程

在将身份验证代码添加到Admin之前工作正常的用户也无法工作。它不会重定向到管理仪表板,而是在注册管理的过程中显示未经授权的

我发现了一个与我完全相似的问题。我尝试了那里给出的解决方案,但情况变得更糟。我的整个应用程序崩溃,并显示出一些
策略。身份验证不是一个功能错误

那么,为什么会显示此错误?我如何在同一个应用程序中对AdminUser进行身份验证、序列化和反序列化

这就是我到目前为止所做的

这是我的app.js user.js登录、注销和注册路由 admin.js登录、注销和注册路径 和isLoggedIn中间件
const passport = require("passport"),
      localStrategy = require("passport-local").Strategy;

const User = require("./models/user"),
      Admin = require("./models/admin");

passport.use(require("express-session") ({ 
    secret : "Wubba lubba dub dub",
    saveUninitialized : false,
    resave : false
}));
app.use(flash());

app.use(passport.initialize()); 
app.use(passport.session());

passport.use("user", new localStrategy(User.authenticate()));
passport.use("admin", new localStrategy(Admin.authenticate()));

passport.serializeUser((user, done) => { 
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  if(user!=null)
    done(null,user);
});

app.use(function(req, res, next) {
  res.locals.currentUser = req.user;
  res.locals.error         = req.flash("error");
  res.locals.success       = req.flash("success");
  next();
});
router.get("/userLogin", (req, res) => {
   res.render("user/userLogin");
});

router.post("/userLogin", passport.authenticate("user", {
        successRedirect : "/user/1",
        failureRedirect : "/userLogin",
    }), (req, res)=> {
});

//user sign up handler
router.get("/signUp", (req, res) => {
   res.render("user/userSignup");
});

router.post("/signUp", (req, res) => {
   const newUser = new User({
      firstName : req.body.firstName,
      lastName : req.body.lastName,
      username : req.body.username,
      email : req.body.email,
      gender : req.body.gender,
      address : req.body.address,
   });
   User.register(newUser, req.body.password, (err, user) =>{
      if(err) {
         return res.render("user/userSignup");
      }
      passport.authenticate("local")(req, res, ()=> {
         res.redirect("/user/1");
      });
   });
});
/admin login handler
router.get("/adminLogin", (req, res) => {
   res.render("admin/adminLogin");
});

router.post("/adminLogin", passport.authenticate("admin", {
        successRedirect : "/admin",
        failureRedirect : "/adminLogin",
    }), (req, res)=> {
});

//admin logout handler
router.get("/adminLogout", (req, res) => {
   res.redirect("/");
});

// sign up
router.get("/adminSignup", (req, res) => {
   res.render("signup");
});

router.post("/adminSignup", (req, res) => {
   const newAdmin = new Admin({
      username : req.body.username,
      email : req.body.email,
   });
   Admin.register(newAdmin, req.body.password, (err, user) =>{
      if(err) {
         return res.render("signup");
      }
      passport.authenticate("local")(req, res, function() {

         res.redirect("/admin");
      });
   });
});
middleware.isLoggedIn = function(req, res, next) {
    if(req.isAuthenticated()) {
        return next();
    }
    req.flash("error", "You need to be logged in first");
    res.redirect("/");
};