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

时间:2017-08-08 04:27:08

标签: javascript node.js express cookies

今天开始学习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);
});

有些事情使我对此代码感到困惑。

  1. 据我所知,serializeUser假设将user.id更改为位并将其存储在Cookie中,但console.log从不打印,这导致我认为此代码永远不会运行,为什么?我读到req.login()被隐式调用,所以我不需要担心它。
  2. console.log回调内的LocalStrategy打印一个sessionID。如果我还没有创建我的新用户,或者第1点中提到的console.log从未运行过,那么该设置是什么时候?
  3. 在退出内部我在req.logOut()之前和之后使用console.log(req.sessionID)拨打req.logOut(),这些都打印相同的内容。我假设这些sessionID是用于确定会话有效的cookie,如果是,这是否意味着用户永远不会注销,因为sessionID永远不会被更改?
  4. 由于

0 个答案:

没有答案