Ответ 1
Полезный маленький трюк заключается в том, чтобы добавить unless
, который делает каждый URL, кроме указанных, если не требуется токен.
Это означает, что вам не нужно создавать app.get
для каждого отдельного пути в вашем api, который вы хотите защитить (если вам не нужны разные секреты для каждого, что я не знаю, почему вы это сделали).
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.');
});
Или вы просто указываете его для одного пути:
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;
}
}));
Обратите внимание на изменение от get
и use
в конфигурации.
Для каждого пути, который вы передаете через express-jwt
, функция getToken
запускается, если это указано в вашей конфигурации.
Что приятное в добавлении unless
заключается в том, что теперь вы минимизировали объем работы, который вам нужно выполнить, чтобы получить токен от пользователя для каждого пути.
Обратитесь к index.js express-jwt
, в котором рассказывается больше о том, как работает getToken
:
- Если вы укажете опцию как функцию, значение токена - это возвращаемое значение функции
- Это означает, что вы можете предоставить настраиваемую логику для обработки ваших токенов и может быть полезным местом для вызова
verify
.
- Это означает, что вы можете предоставить настраиваемую логику для обработки ваших токенов и может быть полезным местом для вызова
- В противном случае он запускает стандартную логику для извлечения маркера из заголовка авторизации с форматом "[Участник авторизации] [токен]" (я обозначаю скобки, чтобы показать, где он разбивает строку).