繁体   English   中英

即使身份验证成功,PassportJS Facebook登录isAuthenticated也会返回false

[英]PassportJS Facebook login isAuthenticated returns false even though authentication succeeds

出于某种原因,在我的NodeJS Express应用程序上,当使用Facebook通过PassportJS库进行身份验证时,无论身份验证成功并返回配置文件数据,对request.isAuthenticated()调用始终返回false

我已经声明我的身份验证回调将成功重定向到/profile路由,它成功完成:

app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/profile', failureRedirect: '/' }));

使用在确定是否继续处理请求之前验证身份验证的函数声明此路由:

app.get('/profile', ensureAuthenticated, user.list);

该功能的定义如下:

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    return res.redirect('/')
}

你可以看到一切都很简单。 我这里没有做任何特别特别的事。

逐步通过PassportJS的代码显示它不会在请求中存储用户数据,除非您在声明身份验证中间件时在选项dict中指定assignProperty 它是在调用isAuthenticated()时尝试访问的同一属性,因为它从不存储这些数据,它总是声称我没有经过身份验证。

不幸的是,指定此密钥会assignProperty Express的路由匹配,这会导致404错误处理回调URL,因为检查assignProperty的代码会立即转移到处理下一个可用路由。

我已经将代码全部添加到了pastie中 我很感激任何人都能提供的任何帮助。

尝试将cookieParsersession中间件移到Passport中间件之前:

app.use(express.cookieParser());
app.use(express.session({ secret: '--- OMMITTED ---' }));
app.use(passport.initialize());
app.use(passport.session());

原因是Express按声明顺序执行中间件。 在您当前的情况下,请求在cookie /会话中间件(Passport中间件所依赖的)之前访问Passport中间件。

(顺便说一句, bodyParser()中间件也是如此,尽管你的路线当前并不依赖它)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM