返回false。从Facebook登录重定向回调初始成功后,使用passport-facebook 1.0.3和express 4.6。 1,req.session.passport和req.user包含serialize调用期间设置的值(我从stragegy得到的),但在随后访问站点上的不同路由时,req.session.passport和req.user为空,并且req.isAuthenticated()返回false,所以在从FB初始成功登录后,所有其他路由上的ensureAuthentication方法失败。 我不使用集群设置,所以我相信在存储器存储足以解决这个问题,Express配置看起来不错(我指的顺序),这里是我的快速配置req.session.passport和req.user空白,req.isAuthenticated在初次成功登录后使用passport-facebook
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]'
}
}
}
这是我先前与内部的完成()回调相关联的信息策略,也在序列化调用中。成功登录和回调后,我使用res.redirect将用户重定向到不同的路由,但来自该路由的请求包含sessionID(所以我不认为它与会话存储问题),但req.user字段不存在(可能是因为passport.initialize()和passport.session()中间件不会找到请求进行身份验证)并且req.session.passport字段为空,以下是req的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);
});
这是创造一个伟大的阻碍我的发展,我怎么能排序了这一点?
嗯...我没有立即的解决方案来推荐你,但你能告诉我们你的'serializeUser'和'deserializeUser'方法吗? 对我来说,它看起来像会话中存储的任何内容都没有正确反序列化。 –
我编辑了这个问题,在问题结尾添加了我的序列化和反序列化方法。谢谢你的回复! –
我也注意到,在后续请求中发送给反序列化方法的'user'对象是'null'! –