2013-03-20 72 views
0

我使用PassportJS用戶名/密碼策略來驗證我網站上的用戶。我保證,用戶必須登錄通過HTTPS,我已經確保了會話cookie只通過HTTPS發送:在Express中將登錄用戶重定向到https?

app.use(express.session({ 
    // ... 
    cookie: { secure:true } 
})); 

但現在,如果有人登錄(通過HTTPS),然後返回到該網站通過HTTP,它看起來像沒有登錄,因爲他們的瀏覽器不發送cookie。

我想將登錄用戶重定向到HTTPS。

我想我需要發出兩個cookie:一個與會話詳細信息(標記爲secure: true),另一個只是說「你已經登錄」(標記爲secure: false)。如果我通過HTTP看到第二個cookie,我可以重定向到HTTPS,併發送安全cookie。 Presto:登錄用戶被重定向到HTTPS。

問題:我如何在Express中執行此操作?

回答

0

當用戶登錄成功,設置cookie:

res.cookie('loggedin', '1', { secure : false /*, other options */ }); 

接下來,使用中間件,其檢查該cookie:

app.use(function(req, res, next) { 
    if (req.cookie.loggedin === '1' && ! req.secure()) 
    { 
    res.redirect(HTTPS_LOCATION); 
    } 
    else 
    { 
    next(); 
    } 
}); 

HTTPS_LOCATION值取決於你的設置,但你可以使用req.path來構建它。

1

當有人通過HTTPS訪問網站時,添加Strict-Transport-Securityheader。這將導致他們的瀏覽器在下次訪問該站點時自動將HTTP重寫爲HTTPS。

app.use(function(req, res, next) { 
    if (req.secure()) { 
     res.header('Strict-Transport-Security', 'max-age=31536000'); 
    } 

    next(); 
}); 
+0

很酷的解決方案,一個要記住:) – robertklep 2013-03-29 15:39:05

相關問題