如何确定用户在使用护照时注销?

今天开始学习节点,我几乎肯定我的用户没有被正确注销,我不明白为什么。 为了login用户,我在路由文件中写了下面的代码

app.post('/api/signup', passport.authenticate('local-signup', function(err, res, req) { console.log(res); })); 

然后在另一个文件这个代码来处理我的用户login的逻辑

 passport.serializeUser(function(user, done) { console.log("serializeUser"); console.log(user); done(null, user.id); }); passport.deserializeUser(function(id, done) { console.log("deserializeUser"); console.log(id); User.findById(id, function(err, user) { done(err, user); }); }); passport.use('local-signup', new LocalStrategy( { usernameField: 'username', passwordField: 'password', passReqToCallback: true }, function(req, username, password, done) { console.log(req.sessionID); process.nextTick(function() { User.findOne({ 'local.username': username }, function(err, user) { if (err) { return done(err); } if (user) { return done(null, false, req.flash('signupMessage', "Username already taken")); } else { let newUser = new User(); newUser.local.username = username; newUser.local.password = newUser.generateHash(password); newUser.save( function(saveErr) { if (saveErr) { throw saveErr; } return done(null, newUser); }); } }); }); }) ); 

然后注销我的用户我在我的路线文件中写了下面的代码

 app.get('/api/session', function(req, res) { console.log(req.sessionID); req.logOut(); console.log(req.sessionID); }); 

有几件事让我对这段代码感到困惑。

  1. 我的理解serializeUser是假设更改user.id位并将其存储在cookie中,但console.log从不打印,这导致我认为这个代码永远不会运行,为什么? 我读了req.login()被隐式调用,所以我不需要担心它。
  2. LocalStrategycallback中的console.log输出一个sessionID。 什么时候设置,如果我还没有创build我的新用户,或点1中提到的console.log从未运行?
  3. 在注销内部,我在req.logOut()之前和之后用console.log(req.sessionID)调用了req.logOut() ,并且这两个都打印了相同的内容。 我假设这些sessionID是cookies用来确定一个会话是有效的,如果是这样,这是否意味着用户永远不会注销,因为sessionID永远不会改变?

谢谢