2017-11-30 5 views
0

Ich bin wirklich nur auf der Suche nach einer Möglichkeit, meinen Code hier aufzuräumen. Ich habe mehrere Routen wie diese. Beachten Sie, dass jede Route einzeln den JSON-Web-Token-Verifizierungsprozess durchläuft.Express: So schützen Sie mehrere Routen mit JSON-Web-Token

router.route('/some-route').post((req, res) => { 
    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return console.log(err); 
    // do something 
    res.json({ some: 'response data' }); 
    }); 
}); 

router.route('/some-other-route').post((req, res) => { 
    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return console.log(err); 
    // do something else 
    res.json({ some: 'response data' }); 
    }); 
}); 

Gibt es einen anderen Weg? Einige meiner Routen nähern sich Callback-Höllen-Ebenen der Verschachtelung, also wäre es schön, dies von jeder Route zu eliminieren.

Antwort

2

Ziemlich sicher können Sie den Router zu use die Funktion als Middleware. Die Funktion wird für jede Route in router aufgerufen.

router.use((req, res, next) => { 
    if(!req.body.token) 
    return res.json({ message: 'Missing token.' }); 

    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return res.json({ message: 'Failed to authenticate token.' }); 
    // do something else 
    req.decoded = decoded 
    next(); 
    }); 
}); 
+0

Ist es noch möglich, meinen "decodierten" Param in die Route zu übergeben? – Alan

+1

Ah ja, du kannst 'req.decoded = decoded' vor' next() 'machen. Ich habe es meiner Antwort hinzugefügt. –

+0

Killer! Das funktioniert perfekt, danke! – Alan

Verwandte Themen