在Express和Passport之间检测Cookie

访问http://localhost/login会立即redirect到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(); }); 

这可以按预期的方式工作,但是当通过身份validation的用户连续访问/login时,整个过程会重复,并且会得到一个新的cookie。

有没有一种方法可以在Express和Passport之间运行一些代码,如果用户已经有了一个有效的Cookie,可以停止Passportredirect到Facebook?

您可以使用类似的东西来ensureAuthenticated/loginpath上进行/login

 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的用户redirect到/当他们尝试访问/login