Я реалізував паспорт з паспортом-локальним і MongoDB, і він працює чудово.
Однак це єдина при завантаженні клієнтська сторонаapp і тому вузол не несе відповідальності за відображення html. Отже, в даний час я показую завантаження спінінгом на завантаження додатка та здійснює окремий дзвінок до api, щоб визначити, чи входить користувач, щоб умовно зробити якийсь матеріал:
router.get("/me", function (req, res) {
res.send(req.isAuthenticated() ? {} || 401);
});
Оскільки паспорт вже автентифікує мої маршрути та дзвінки deserializeUser
це здається безглуздим - мені потрібен спосіб передачі додаткової інформації (у файлі cookie?), яка говорить про те, що користувач авторизується, я вгадуюсь deserializeUser
?
server.use(session({secret: settings.sessionSecret}));
server.use(passport.initialize());
server.use(passport.session());
....
passport.use(new LocalStrategy(
localOpts,
function(email, password, done) {
User.findOne({
email: email,
activated: true
}, function (err, user) {
....
});
}
));
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Зауважте, що два файли cookie, створені під час входу, успішні:
express:sess
express:sess.sig
Коли він виявляє наявність цих файлів cookie, то, здається, просто дзвонить deserializeUser
отже, чому я думаю, що я можу поспілкуватися з клієнтом, у кого користувач авторизується там, чи іншим чином, щоб увійти всередину passport.use
проміжне програмне забезпечення?
Відповіді:
0 для відповіді № 1Виявляється, я можу просто додати проміжне програмне забезпечення після паспорта. Я був стурбований цим req.isAuthenticated
створить інший запит до db, але він не "t:
server.use(function(req, res, next) {
res.cookie("isAuthenticated", req.isAuthenticated());
next();
});