2017-03-13 86 views
0

我有一個.all端點,它被連接到accounts的所有端點調用。我想要做的是檢查一個令牌,然後如果它是真的,則進入實際請求的端點。Nodejs如何阻止從.all端點請求的實際端點?

我以爲next()應該這樣做,但其他請求被調用,無論令牌是否有效。

我在做什麼錯?

router.all(['/accounts', '/accounts/*'], (req, res, next) => { 

    admin.auth().verifyIdToken(req.headers.authorization) 
    .then((token) => { 

    // TODO: Fix so that this actually works, now the other routes are being called regardless 
    next(); 
    }).catch((error) => { 

    res.send({ 
     error: error, 
     data: { 
     account: null, 
     message: 'Invalid token', 
     status: 401 
     } 
    }); 
    }); 
}); 

router.post('/accounts', (req.res, next) => {}); 
router.post('/accounts/:uid', (req.res, next) => {}); 

如果verifyToken函數成功,我如何確保.all端點只持續到/ accounts或/ accounts /:uid?顯然next()在阻止連續請求方面沒有做任何事情。

回答

0

如果您在catch不return那麼它將繼續到下一個途徑,如果回到它打破了鏈條:

router.all(['/accounts', '/accounts/*'], (req, res, next) => { 

    admin.auth().verifyIdToken(req.headers.authorization) 
    .then((token) => { 
    next(); 
    }).catch((error) => { 

    return res.send({ 
     error: error, 
     data: { 
     account: null, 
     message: 'Invalid token', 
     status: 401 
     } 
    }); 
    }); 
});