【发布时间】:2014-01-11 10:45:02
【问题描述】:
现在,当我访问我的页面 https://example.com 并单击登录时,它转到 https://example.com/auth/facebook,然后它会处理 facebook 的内容并最终回调 http://example.com/auth/facebook/callback。我似乎无法让它使用 https 方案进行回调(但仅当请求周期在 https 中开始时)。
现在,当通过 https iframe(facebook 画布应用程序)查看时,我收到错误
[已屏蔽] 页面位于 'https://apps.facebook.com/example/?fb_source=notification&ref=notif¬if_t=app_notification' 通过 HTTPS 加载,但运行不安全的内容 'http://example.com/auth/facebook/callback?code=AQD5TUeTP…yXC0ZM8S45V2iTta629IaquCpAqVUbhAvNCFveaDBlbKg4J4#=': 此内容也应通过 HTTPS 加载。
passport.use(new FacebookStrategy({
clientID: process.env.FB_CLIENT,
clientSecret: process.env.FB_SECRET,
callbackURL: "/auth/facebook/callback",
profileFields: ['id']
},...
app.get('/auth/facebook',
passport.authenticate('facebook', {
scope: ["read_stream"]
})
);
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
failureRedirect: '/#'
}),
function(req, res) {
res.redirect('/#');
});
我在 heroku 上运行它,它处理 https 上的详细信息。
编辑 显然,节点提供了 req.connection.encrypted 以及有关请求是否为 https 的信息。由于我在处理节点之前的所有 https 的 nginx 后面的 heroku 上运行,因此 req.connection.encrypted 将始终未定义。
还是不知道怎么解决。
【问题讨论】:
-
passport oauth2 策略使用 req.connection.encrypted 来检查它是否处于安全连接中。你能试试看它的输出吗?也许您实际上是在不安全的连接下运行的。
-
乔纳斯,这是一个很好的评论,感谢您为我指明了正确的方向。我在这里找到了一个帖子:groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY,因为 SSL 是由 Heroku 上的 nginx 处理的,所以 req.connection.encrypted 始终是“未定义的”。关于如何解决这个问题的任何想法?
-
乔纳斯,那条评论让我想出了如何解决这个问题(挖掘护照代码)。如果你能做出回答,我会奖励它的声望点。欢迎您接受我发布的答案(在这种情况下,我将在之后删除我的答案)。
-
太棒了!我做了一个回答,试图将所有信息放在一起。
标签: javascript node.js facebook passport.js