簡體   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