我一直在尋找,看看這是否可能一段時間,但還沒有找到任何東西。護照OAuth持票人OR isauthenticated
基本上我使用Passport來處理用戶驗證。當然使用Node.js和Express來處理事物的服務器端。我還使用oauth2orize來允許OAuth和處理API調用。
對於API調用,我使用運行passport.authenticate('bearer', { session: false })
的中間件controllerClient.isBearerAuthenticated
。然後關閉並運行passport.use("bearer", new BearerStrategy)
內部的功能。基本上檢查令牌是否有效並調用回調函數。
對於非API請求和只是普通的網頁,它運行以下中間件來檢查身份驗證。
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/');
}
所以這是我的問題。我想允許我的API調用被訪問,如果有不記名令牌或req.isAuthenticated()
= true。目前我必須選擇是否要使用isLoggedIn
中間件或controllerClient.isBearerAuthenticated
中間件。我試圖找到一種方法將它們結合成一個或一個語句或其他東西。
我在考慮有多箇中間件功能,因此它調用isLoggedIn
然後調用controllerClient.isBearerAuthenticated
。但似乎問題在於回調函數會被調用,所以它們都會被調用。我也在研究如何找到一種方法來跳過下一個中間件功能並轉到下一個中間件功能,但我無法找到任何相關信息。
我認爲最好的選擇將是找出一種方法來跳過controllerClient.isBearerAuthenticated
IFreq.isAuthenticated()
=真。現在可能有更好的方法來做到這一點,如果是這樣,我很樂意聽到它。
但在如何使用中間件進行檢查,看用戶是否通過req.isAuthenticated()
或controllerClient.isBearerAuthenticated
autheroized有什麼建議?或者實現這個目標的最好方法是什麼?
還有一點需要注意。我問this之前的問題,並發現
passport.authenticate
意味着處理實際的 身份驗證,而不是已經通過身份驗證的用戶。 否則,我只會使用passport.authenticate
與 數組護照策略。並且使用connect-ensure-login與我現在正在使用connect-ensure-login或controllerClient.isBearerAuthenticated
的問題相同。
非常感謝提前!