今天开始学习Node,我几乎肯定我的用户没有正确注销,我不明白为什么。要登录用户,我在路线文件中写了以下代码
app.post('/api/signup', passport.authenticate('local-signup', function(err, res, req) {
console.log(res);
}));
然后在另一个文件中使用此代码来处理登录用户的逻辑
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()
被隐式调用,所以我不需要担心它。console.log
回调内的LocalStrategy
打印一个sessionID。如果我还没有创建我的新用户,或者第1点中提到的console.log
从未运行过,那么该设置是什么时候?req.logOut()
之前和之后使用console.log(req.sessionID)
拨打req.logOut()
,这些都打印相同的内容。我假设这些sessionID是用于确定会话有效的cookie,如果是,这是否意味着用户永远不会注销,因为sessionID永远不会被更改?由于