访问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?
答案 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
。