当passport.authenticate 中存在successRedirect 时,Express 仅重定向到所需页面

问题描述

我在使用 Node Express 应用时遇到了一些问题。当我通过通行证删除身份验证方法中的 successRedirect 属性时,它不会重定向

如果我删除了 successRedirect,并将其替换为回调函数,下面的代码将不会重定向到所需的页面

defaultController.js 中的代码

// passport local strategy
passport.use(new LocalStrategy({
    usernameField: 'email',passReqToCallback: true,},(req,email,password,done)=>{
    User.findOne({ email:email }).then(user=>{
        if(!user){
            return done(null,false,req.flash('error-message','User not found with this email.'));
        }
        bcrypt.compare(password,user.password,(err,passwordMatched)=>{
            if(err){
                return err;
            }
            if(!passwordMatched){
                return done(null,'Invalid username or password.'));
            }
            return done(null,user,req.flash('success-message','Login successful'));
        });
    });
}));

passport.serializeUser(function(user,done) {
    done(null,user.id);
  });

  passport.deserializeUser(function(id,done) {
    User.findById(id,function(err,user) {
      done(err,user);
    });
  });

router.route('/login')
    .get(defaultController.login)
    .post(passport.authenticate('local',{
        successRedirect: '/admin',failureRedirect: '/login',failureFlash: true,successFlash: true,session:true,}),defaultController.loginPost);

这就是我想应用的,但它似乎不起作用并且卡在 chrome 上的无限加载中,但是在控制台上,它可以收到输出here’s the output from the console

router.route('/login')
.get(defaultController.login)
.post(passport.authenticate('local',{
    // successRedirect: '/admin',(user)=>{
    console.log(user.user.role);
    if(user.user.role === 'admin'){
        defaultController.loginPost;
    }else{
        console.log('hi');
    }
});

作为附加信息,这里是负责处理请求的 defaultController 片段:

login: (req,res)=>{
        console.log();
        res.render('default/login')
    },loginPost: (req,res)=>{
        console.log(req.body.username);
        res.render('/admin')
    },

有什么帮助吗?

解决方法

您应该使用 redirect 而不是 render 这样做:

login: (req,res)=>{
        console.log();
        res.redirect('default/login')
    },loginPost: (req,res)=>{
        console.log(req.body.username);
        res.redirect('/admin')
    },