如何确定用户在使用护照时注销?
今天开始学习节点,我几乎肯定我的用户没有被正确注销,我不明白为什么。 为了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); });
有几件事让我对这段代码感到困惑。
- 我的理解
serializeUser
是假设更改user.id
位并将其存储在cookie中,但console.log
从不打印,这导致我认为这个代码永远不会运行,为什么? 我读了req.login()
被隐式调用,所以我不需要担心它。 - 在
LocalStrategy
callback中的console.log
输出一个sessionID。 什么时候设置,如果我还没有创build我的新用户,或点1中提到的console.log
从未运行? - 在注销内部,我在
req.logOut()
之前和之后用console.log(req.sessionID)
调用了req.logOut()
,并且这两个都打印了相同的内容。 我假设这些sessionID是cookies用来确定一个会话是有效的,如果是这样,这是否意味着用户永远不会注销,因为sessionID永远不会改变?
谢谢