身份验证后 PassportJs 不重定向
PassportJs not redirecting after authentication
我在使用 Passport 进行身份验证时遇到了一些问题。
我将我的注册策略定义如下:
passport.use('local_signup', new localStrategy({
usernameField: 'username',
passwordField:'password',
passReqToCallback: true
},function(req,username, password,done){
User.findOne({username: username},function(err,user){
if(err){
console.log(err);
} else{
if(user){
console.log("user exists.")
}
else{
const newUser = new User();
newUser.email = req.body.email;
newUser.password =req.body.password;
newUser.username = req.body.user_name;
newUser.first_name = req.body.first_name;
newUser.last_name = req.body.last_name;
newUser.save(function(err){
if(err){
console.log(err);
}else{
console.log('success');
}
})
}
}
})
})
)
然后我在注册路由中调用了这个策略
app.post('/register', passport.authenticate('local_signup', {
successRedirect : '/drinks',
failureRedirect : '/register',
failureFlash : true
}));
如果身份验证成功,它应该触发饮料路由
app.get('/drinks',function(req,res){
if(req.isAuthenticated()){
res.render('start');
} else {
res.redirect('/login')
}
})
successRedirect 没有重定向到所需的页面。它仍然停留在注册路线上。然而,人口稠密的用户出现在我的数据库中,所以至少我的策略是有效的。我不知道如何调试这个。任何帮助,将不胜感激。谢谢
您没有使用 done()
。据我了解,它是策略代码的退出点,并根据您传入的参数让流程成功或失败。它是策略实施代码中回调中的一个参数。是.
如果成功就这样调用:
return done(null, newUser);
出错时这样调用:
done(err);
我在使用 Passport 进行身份验证时遇到了一些问题。 我将我的注册策略定义如下:
passport.use('local_signup', new localStrategy({
usernameField: 'username',
passwordField:'password',
passReqToCallback: true
},function(req,username, password,done){
User.findOne({username: username},function(err,user){
if(err){
console.log(err);
} else{
if(user){
console.log("user exists.")
}
else{
const newUser = new User();
newUser.email = req.body.email;
newUser.password =req.body.password;
newUser.username = req.body.user_name;
newUser.first_name = req.body.first_name;
newUser.last_name = req.body.last_name;
newUser.save(function(err){
if(err){
console.log(err);
}else{
console.log('success');
}
})
}
}
})
})
)
然后我在注册路由中调用了这个策略
app.post('/register', passport.authenticate('local_signup', {
successRedirect : '/drinks',
failureRedirect : '/register',
failureFlash : true
}));
如果身份验证成功,它应该触发饮料路由
app.get('/drinks',function(req,res){
if(req.isAuthenticated()){
res.render('start');
} else {
res.redirect('/login')
}
})
successRedirect 没有重定向到所需的页面。它仍然停留在注册路线上。然而,人口稠密的用户出现在我的数据库中,所以至少我的策略是有效的。我不知道如何调试这个。任何帮助,将不胜感激。谢谢
您没有使用 done()
。据我了解,它是策略代码的退出点,并根据您传入的参数让流程成功或失败。它是策略实施代码中回调中的一个参数。是
如果成功就这样调用:
return done(null, newUser);
出错时这样调用:
done(err);