Express和Passport之间的Cookie检测

时间:2013-12-16 00:55:44

标签: node.js cookies express passport-facebook

访问http://localhost/login的用户会立即重定向到Facebook以确认应用程序使用情况。获得授权后,Facebook会与http://localhost/login?code=联系,并提供一个特殊代码,允许服务器获取用户的姓名和性别等信息。

Express().get('/login', Passport().authenticate('facebook', {
    failureRedirect: 'http://localhost/',
}), function(req, res) {
    database.saveData(req.user, **randomlyGeneratedHash**);
    res.cookie('session', **randomlyGeneratedHash**);
    res.end();
});

这可以按预期工作,但经过身份验证的用户会连续访问/login,整个过程会重复,他们会获得一个新的Cookie。

我是否可以在Express和Passport之间运行一些代码,以便在用户拥有有效cookie时阻止Passport重定向到Facebook?

1 个答案:

答案 0 :(得分:1)

您可以在/login路线上使用与ensureAuthenticated类似的内容:

var CheckIfAlreadyLoggedIn = function(req, res, next) {
  if (req.isAuthenticated()) {
    return res.redirect('/'); // or where you want them to go
  }
  next();
};

Express().get('/login', CheckIfAlreadyLoggedIn, Passport().authenticate('facebook', ...));

当用户尝试访问/时,会将已登录的用户重定向回/login