问题描述
我在使用 Node Express 应用时遇到了一些问题。当我通过通行证删除身份验证方法中的 successRedirect 属性时,它不会重定向。
如果我删除了 successRedirect,并将其替换为回调函数,下面的代码将不会重定向到所需的页面。
// 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')
},