Есть ли дополнительное программное обеспечение для проверки подлинности от Passport.js?Дополнительная аутентификация Passport.js
Предположим, у меня есть маршрут, /api/users
. Я хочу предоставить список пользователей для публики, но для аутентифицированных людей я хочу добавить больше полей.
В настоящее время я просто тупой пользовательский метод, который делает то же самое, но мне интересно, если:
- Passport.js уже предоставляет такую вещь или
- , как я могу сделать это часть из паспорт, как плагин или так.
Мой метод, грубо говоря, выглядит
function optionalAuth(req, res, next) {
var authHeader = req.headers.authorization;
var token = parseToken(authHeader); // just getting the OAuth token here
if(!token) {
return next();
}
User.findOne({
token: token
}, function(err, user) {
if(err) {
return res.json(401, {message: 'auth expired'});
};
if(user) {
req.user = user;
}
next();
});
}
Это, однако, кажется стремно мне, а также не в паспортном-AUTH-strategies.js или какой-либо другой слой аутентификации, где я думаю, что он должен быть. Каков лучший способ сделать это?
Бонусных баллов за рассказывал мне, если я делаю правильную вещь, возвращающуюся 401, если я найду фишку, но это недопустимое :)
Предполагая, что у вас есть основы работы (аутентификация пользователей), я думаю, вы можете использовать 'req.isAuthenticated()' (что-то, что определяет Passport), чтобы проверить, хотите ли вы вернуть дополнительный полей или нет. – robertklep
Я не могу использовать req.isAuthenticated, потому что до этого я не могу поместить pass.authenticate(). Зачем? Потому что пользователи, не прошедшие проверку подлинности, будут отклонены. У меня нет сеанса, это API без состояния, только токен-носитель. Если я положу паспорт.authenticate() на маршруте, некоторые пользователи получат 401. Я хочу, чтобы они проходили, только получайте ограниченную информацию. – Zlatko