护照反序列化功能正在从会话中删除用户
Passport deserialize function is removing user from the session
说实话,我今天才开始学护照。我觉得我了解护照的一些工作原理,但我仍在努力熟悉自己。我的问题(我认为)是我的用户正在从会话中删除,这使我无法访问经过身份验证的路由。我 console.logged 反序列化函数中的用户 ID 来检查它是否被存储在会话中,它是 ...
//serialize user into the session
passport.serializeUser(function(user,done){
done(null,user.id);
});
//deserialize the user from the session
passport.deserializeUser(function(id,done){
console.log('user id is: ' + id); //works and logs user id
User.findById(id, function(err,user){
done(err,user);
});
});
这是我的路线和通行证中间件...
app.post('/login', function(req,res,next){
passport.authenticate('local-login', function(err,user,info){
if(err){
console.log("we have an internal error!");
return next(err);
}
if(!user){
return res.send({success:false, message:'failed to login!'});
}else{
req.login(user, function(err){
if(err){
return next(err);
}
return res.send({ success : true, message : 'authentication succeeded' });
});
}
})(req,res,next);
});
//route middleware to make sure that a user is logged in
function isLoggedIn(req,res,next){
//if the user is authenticated in the session, carry on
if(req.isAuthenticated()){
next();
}
//if they are not authenticated in the session, redirect them to the home page
res.redirect('/');
}
非常感谢任何帮助、见解和建议;谢谢!
这是因为您总是将用户重定向到 isLoggedIn
中间件中的索引页面。需要使用return:
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
next();
// STOPS further execution of this function and prevents redirecting the user
return;
}
res.redirect('/');
}
请记住,它只是 JavaScript - 没有框架做任何更改 - Express、Passport,甚至 Promises 都是纯 JS,它们不会修改虚拟机的工作方式。 GL!
p.s。
如果出现问题,尤其是在开始时,我建议使用 if-else
语句。你不会有这样的问题:
if (req.isAuthenticated()) {
next();
} else {
res.redirect('/');
}
说实话,我今天才开始学护照。我觉得我了解护照的一些工作原理,但我仍在努力熟悉自己。我的问题(我认为)是我的用户正在从会话中删除,这使我无法访问经过身份验证的路由。我 console.logged 反序列化函数中的用户 ID 来检查它是否被存储在会话中,它是 ...
//serialize user into the session
passport.serializeUser(function(user,done){
done(null,user.id);
});
//deserialize the user from the session
passport.deserializeUser(function(id,done){
console.log('user id is: ' + id); //works and logs user id
User.findById(id, function(err,user){
done(err,user);
});
});
这是我的路线和通行证中间件...
app.post('/login', function(req,res,next){
passport.authenticate('local-login', function(err,user,info){
if(err){
console.log("we have an internal error!");
return next(err);
}
if(!user){
return res.send({success:false, message:'failed to login!'});
}else{
req.login(user, function(err){
if(err){
return next(err);
}
return res.send({ success : true, message : 'authentication succeeded' });
});
}
})(req,res,next);
});
//route middleware to make sure that a user is logged in
function isLoggedIn(req,res,next){
//if the user is authenticated in the session, carry on
if(req.isAuthenticated()){
next();
}
//if they are not authenticated in the session, redirect them to the home page
res.redirect('/');
}
非常感谢任何帮助、见解和建议;谢谢!
这是因为您总是将用户重定向到 isLoggedIn
中间件中的索引页面。需要使用return:
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
next();
// STOPS further execution of this function and prevents redirecting the user
return;
}
res.redirect('/');
}
请记住,它只是 JavaScript - 没有框架做任何更改 - Express、Passport,甚至 Promises 都是纯 JS,它们不会修改虚拟机的工作方式。 GL!
p.s。
如果出现问题,尤其是在开始时,我建议使用 if-else
语句。你不会有这样的问题:
if (req.isAuthenticated()) {
next();
} else {
res.redirect('/');
}