理想情况下,主页上有一个通用的登录按钮,该按钮会重定向到多个登录按钮,其中一个用于Facebook。用户单击该按钮,如果通过身份验证,则将其重定向到/my-reptiles/
。
但是,实际上发生的是,当用户单击“使用Facebook登录”时,他们并没有收到来自Facebook的确认提示,而是立即从{{1}中的ensureAuthenticated()
方法重定向回到首页}}。在私人浏览中运行时,系统会要求我先登录到Facebook,然后再进行重定向,但我没有被要求批准使用Facebook作为登录方法。这正常吗?
即使my-reptiles.js
失败,仍会为用户创建本地mongodb条目。
在Facebook开发者控制台上,我将应用程序域设置为isAuthenticated()
,并将站点URL设置为localhost
。
这是控制台输出:
http://localhost:3000/
这是网络日志:
my-reptiles.js
GET /auth/facebook 302 4.309 ms - 0
GET /auth/facebook/callback?code=LONG_CODE_HERE 302 215.462 ms - 68
Unauthenticated request!
GET /my-reptiles 302 0.879 ms - 46
GET / 304 14.854 ms - -
app.js
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
console.log("Unauthenticated request!");
res.redirect('/');
}
}
router.get('/', ensureAuthenticated, function(req, res, next) {
//Do stuff
});
module.exports = router;
答案 0 :(得分:0)
问题是,根据this answer,我应该在路线之后添加会话和护照,而应该在之前添加会话和护照。
//Routes WERE here
const cookieExpirationDate = new Date();
const cookieExpirationDays = 365;
cookieExpirationDate.setDate(cookieExpirationDate.getDate() + cookieExpirationDays);
app.use(session({
secret: 'sekret',
saveUninitialized: true,
resave: true
}));
app.use(passport.initialize());
app.use(passport.session());
//Routes SHOULD BE here