Czy istnieje opcjonalne oprogramowanie pośredniczące do uwierzytelniania ze strony Passport.js?Opcjonalne uwierzytelnianie Passport.js
Załóżmy, że mam trasę, /api/users
. Chcę podać tylko listę użytkowników do wiadomości publicznej, ale do uwierzytelnionych osób, chcę dodać więcej pól.
Obecnie mam tylko głupi sposób niestandardowy, który robi to samo, ale zastanawiam się, czy:
- Passport.js przewiduje już taką rzecz lub
- jak mogę zrobić to część od paszport, jak wtyczka lub coś podobnego.
Moja metoda, z grubsza wygląda
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();
});
}
to jednak wydaje mi się głupie, a także nie w paszporcie-auth-strategies.js lub jakaś inna warstwa auth gdzie myślę, że powinien być. Jaki jest lepszy sposób na zrobienie tego?
Dodatkowe punkty za poinformowanie mnie, czy robię właściwą rzecz powracającego 401 jeśli znajdę token, ale to nieważne :)
Zakładając, że masz podstawowe funkcje (uwierzytelnianie użytkowników), myślę, że możesz użyć 'req.isAuthenticated()' (który jest zdefiniowany przez Passport), aby sprawdzić, czy chcesz zwrócić dodatkowe pola lub nie. – robertklep
Nie można użyć polecenia req.isAuthenticated, ponieważ nie mogę przedtem podać pliku passport.authenticate(). Czemu? Ponieważ nieuwierzytelnieni użytkownicy zostaną odrzuceni. Nie mam sesji, to bezpaństwowy interfejs API, tylko token na okaziciela. Jeśli umieściłbym passport.authenticate() na trasie, niektórzy użytkownicy otrzymaliby 401. Chcę, żeby je przekazali, a otrzymają tylko ograniczone informacje. – Zlatko