Un piccolo trucco utile è aggiungere unless
che rende ogni URL tranne quelli specificati da, a meno che non sia richiesto un token.
Ciò significa che non è necessario creare un app.get
per ogni singolo percorso nell'API che si desidera proteggere (a meno che non si vogliano segreti diversi per ciascuno, che non so perché lo si vorrebbe).
var jwt = require('jsonwebtoken');
var expressJWT = require('express-jwt');
app.use(
expressJWT({
secret: 'hello world !',
getToken: function fromHeaderOrQueryString (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer')
return req.headers.authorization.split(' ')[1];
else if (req.query && req.query.token)
return req.query.token;
return null;
}
}).unless({ path: ['/login'] }));
// Test paths
app.get('/login', function (req, res) {
res.send("Attempting to login.");
});
app.get('/otherurl', function (req, res) {
res.send('Cannot get here.');
});
Oppure è sufficiente specificare per un unico percorso:
app.get('/protected',
expressJWT({
secret: 'hello world !',
getToken: function fromHeaderOrQueryString (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer')
return req.headers.authorization.split(' ')[1];
else if (req.query && req.query.token)
return req.query.token;
return null;
}
}));
notare il cambiamento da get
e use
nella configurazione.
Per ogni percorso fornito tramite express-jwt
, la funzione getToken
viene eseguita se specificato nella configurazione.
La cosa bella dell'aggiunta di unless
è che ora hai ridotto al minimo la quantità di lavoro che devi fare per ottenere il token dall'utente per ogni singolo percorso.
Fare riferimento al index.js di express-jwt
che ti dice di più su come getToken
opere:
- Se si specifica l'opzione come una funzione, il valore simbolico è il valore restituito della funzione
- Ciò significa che puoi fornire una logica personalizzata per gestire i tuoi token e potrebbe essere un posto utile per chiamare
verify
.
- Altrimenti si corre la logica standard per estrarre il token dalla intestazione di autorizzazione con il formato di '[Autorizzazione Bearer] [Token]' (I denotare la parentesi per mostrare dove si divide la stringa).
fateci sapere se le nostre risposte hanno aiutato a risolvere il vostro problema o vi indirizzano nella direzione corretta, poiché vorremmo garantire che le nostre risposte siano costruttive e vantaggiose per gli utenti della comunità e per voi stessi. Grazie! – Signus