Ответ
Да, использовал Passport.js в нескольких проектах на Express. Это middleware для аутентификации, которое поддерживает множество стратегий через плагины.
Чаще всего применял:
- Local Strategy для аутентификации по логину/паролю
- JWT Strategy (passport-jwt) для stateless-аутентификации в REST API
- OAuth2 стратегии для интеграции с Google, GitHub
Пример настройки JWT стратегии:
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const opts = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.JWT_SECRET
};
passport.use(new JwtStrategy(opts, async (jwt_payload, done) => {
try {
const user = await User.findById(jwt_payload.sub);
if (user) {
return done(null, user);
}
return done(null, false);
} catch (err) {
return done(err, false);
}
}));
Защита роута:
app.get('/profile', passport.authenticate('jwt', { session: false }),
(req, res) => {
res.json({ user: req.user });
}
);
Основное преимущество Passport.js — единообразный интерфейс для разных стратегий аутентификации и хорошая интеграция с Express middleware.