2016-06-28 5 views
1

Я искал в другом месте этот ответ, но ничего не нашел.Конфигурация сеанса паспорта необязательна?

Паспортная документация по конфигурации: http://passportjs.org/docs/configure подразумевает, что часть сеанса является необязательной. Позже в документации также подразумевает это когда речь идет о постоянных сеансах входа в системе:

If your application uses persistent login sessions, passport.session() middleware must also be used.

Я знаю, что большинство реальных приложения требуют постоянного сеанса, но для целей обучения, я пытаюсь построить это вверх постепенно и хочу иметь вход в систему и перенаправить на страницу успеха без паспорта, пытаясь сериализовать моего пользователя.

В настоящее время у меня есть и неправильный пароль, и неверное имя пользователя, перенаправляемое на страницу сбоя. Когда я вводим хорошие учетные данные и размещаю пользователя в db, я не перенаправляю страницу успеха. Вместо этого я получаю следующее сообщение об ошибке:

Error: Failed to serialize user into session 

Я знаю, добавив следующее будет решить вопрос:

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

Как настроить паспорт не сериализации моего пользователя? Возможно ли это?

+0

Просто используйте сеансы, это буквально просто пара строк кода, чтобы заставить его работать. 'app.use ('session (...));' и 'app.use (passport.session()); вам нужно будет установить пакет экспресс-сессий' npm install express-session' и потребовать его, прежде чем вы сможете используйте его 'var session = require ('express-session')'. Вот и все. – Molda

+0

@Molda некоторые люди предпочитают использовать другой метод отслеживания состояния аутентификации (например, использование JWT или когда вы реализуете webapp, который не будет использоваться браузерами), поэтому я считаю, что это правильный вопрос :) – robertklep

+0

@robertklep Я полностью согласен. Но, как упоминалось в вопросе ** «для учебных целей» **, я думал, что это будет самый простой и быстрый способ заставить его работать, я определенно не пытался рекомендовать его как лучшее решение. Я сам использую JWT. – Molda

ответ

0

Вы получите эту ошибку, если не укажете disable session support при вызове passport.authenticate().

+0

Указанная вами ссылка предназначена для отключения использования постоянного сеанса для проверки подлинности при последующих запросах и вместо этого требует, чтобы вызывающий всегда предоставлял базовые учетные данные. Мой вопрос относится к ошибке при входе в систему и создании настройки сеанса. –

+0

@MillieWalsh такой тип, да, хотя он не привязан к [Basic Authentication] (https://en.wikipedia.org/wiki/Basic_access_authentication). Также может быть, что обработчик аутентификации «success» устанавливает или возвращает токен, который должен быть передан в последующие запросы (в сочетании с пользовательским промежуточным программным обеспечением для проверки его действительности) – robertklep

Смежные вопросы