現在,當我訪問我的頁面https://example.com並單擊登錄時,它會轉到https://example.com/auth/facebook,然後執行facebook的操作並最終回撥http://example.com/auth/facebook/callback。我似乎無法讓它使用https方案回叫(但僅在請求週期以https開頭時)。PassportJS http和https之間的回撥開關
現在,通過HTTPS IFRAME(Facebook的帆布APP)看時,我得到的錯誤
[鎖定]上的網頁 '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細節運行此。
EDIT 顯然節點提供信息req.connection.encrypted作爲對請求是否是HTTPS。由於我在nginx後面運行的heroku處理所有https之前的節點,因此req.connection.encrypted將始終未定義。
儘管如此,仍然不知道如何解決這個問題。
護照的oauth2策略使用req.connection.encrypted爲ch eck如果它處於安全連接狀態。你可以試着看看它的輸出嗎?也許你實際上是在不安全的連接下運行。 – Jonas
喬納斯,這是一個很棒的評論,謝謝你指出我正確的方向。我在這裏找到了一篇文章:https://groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY,它評論說,由於SSL在Heroku上由nginx處理,因此req.connection.encrypted始終是「未定義的」。關於如何解決這個問題的任何想法? –
喬納斯,那評論讓我想出瞭如何解決這個問題(通過護照代碼挖掘)。如果你能做出回答,我會授予它信譽點。歡迎您將我發佈的答案(在這種情況下,我將在後面刪除)。 –