req.session.passport и req.user blank, а req.isAuthenticated возвращает false после первоначального успешного входа в систему с использованием passport-facebook
После первоначального успешного входа из Facebook и обратного вызова перенаправления входа с использованием passport-facebook 1.0.3 и express 4.6.1, req.session.passport и req.user содержат значение, установленное во время вызова сериализации (который я получаю из stragegy), но при последующих посещениях различных маршрутов на сайте req.session.passport и req.user не указываются, а req.isAuthenticated () возвращает значение false, поэтому после первоначального успешного входа в систему из FB происходит сбой метода sureAuthentication на всех других маршрутах. Я не использую настройку кластера, поэтому я считаю, что хранилища памяти достаточно для этого, экспресс-конфигурация выглядит хорошо (я имею в виду порядок), вот моя экспресс-конфигурация
configExpressApp.set('views', './views');
configExpressApp.set('view engine', 'jade');
configExpressApp.use(morgan('dev'));
configExpressApp.use(cookieParser());
configExpressApp.use(bodyParser.urlencoded({
extended: true,
}));
configExpressApp.use(bodyParser.json());
configExpressApp.use(expressSession({
secret:'MyExpressSecret',
saveUninitialized: true,
resave: true
}));
configExpressApp.use(passport.initialize());
configExpressApp.use(passport.session());
configExpressApp.use(methodOverride());
configExpressApp.use(express.static('./public'));
Вот объект req.session при начальном успешном входе в систему и перенаправлении. Req.user содержит те же данные, что и req.session.passport.user
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport:
{ user:
{ _id: 53ce23e3121421f229a438f8,
info: false,
loginType: 'fb',
fbId: 'MyId',
name: 'Karthic Rao',
email: '[email protected]'
}
}
}
это информация, которую я ранее связывал с обратным вызовом done () внутри стратегии, а также внутри вызова сериализации. После успешного входа в систему и обратного вызова я использую res.redirect, чтобы перенаправить пользователя на другой маршрут, но запросы, поступающие с этого маршрута, содержат sessionID (поэтому я не думаю, что это проблема с хранилищем сеансов), но req.user поле не существует (возможно, из-за того, что промежуточные программы passport.initialize () и passport.session () не находят запрос на проверку подлинности), а поле req.session.passport пусто, здесь приведены подробности из console.log запроса объект.
sessionID: 'I9R1c3PIYgDW5OpWbNT7qb02Hn4lOeAB',
session:
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport: {} },
Вот мой метод десериализации
passport.deserializeUser(function(user, done) {
console.log('deserialize loginType facebook');
db.collection("users").findOne({
fbId: user.id
}, function(err, docs) {
console.log(docs);
done(err, docs);
});
});
Вот мой метод сериализации
passport.serializeUser(function (user, done) {
console.log(user);
done(null, user);
});
Это создает большие препятствия для моего развития, как я могу разобраться в этом ??