Я пытаюсь выяснить, почему паспорт не удается инициализировать сеанс пользователя (после входа в систему, req.isAuthenticated()
всегда терпит неудачу):паспорт никогда не связывает пользователя к сеансу
1) паспорт никогда не попадает в passport.serializeUser
или passport.deserializeUser
:
passport.serializeUser(function(user, callback) {
callback(null, user._id);
});
passport.deserializeUser(function(id, callback) {
User.findById(id, function(err, user) {
if (!err) callback(null, user);
else callback(err, null);
});
});
2) локальная стратегия, которую я создал работу: passport.authenticate
имеет доступ к объекту пользователя, и никаких ошибок не выбрасываются:
app.post('/login', function (req, res, next) {
passport.authenticate('local-login', function(err, user, message) {
// No errors here, always access to the correct user object
})(req, res, next);
});
3) Моя конфигурация:
var express = require('express');
var router = express.Router();
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
router.use(cookieParser('secret'));
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
var session = require('express-session');
var passport = require('passport');
router.use(session({
secret: config.secrets.session,
saveUninitialized: true,
resave: true,
cookie: {
maxAge: 3600000,
secure: (config.env === 'production')
}
}));
router.use(passport.initialize());
router.use(passport.session());
После выполнения запроса POST к /login
, req.isAuthenticated()
всегда сообщает отрицательны. При проверке консоли создается только куки-файл Express session (connect.sid). Вход req.session
на консоль (непосредственно после app.post('/login'....) {
) дает:
{ cookie:
{ path: '/',
_expires: Tue Jan 27 2015 22:30:18 GMT+0100 (CET),
originalMaxAge: 3600000,
httpOnly: true,
secure: false },
passport: {}
}
Я снова проверил мою конфигурацию в сто раз, но я не могу понять, что я делаю неправильно.
Вы уверены, что не находитесь в производственной среде, понимаемой вашим конфигурационным модулем? – Paul
Да, я дважды проверил его, но он настроен на разработку. – jroeleveld