【发布时间】:2016-01-07 13:42:35
【问题描述】:
我如何顺序运行两个或多个passport 策略,这意味着如果一个策略空了然后运行另一个策略?
我试过这样做:
app.post('/', function (req,res,next){
passport.authenticate('strategy1', function (err, result1) {
if (err) { return next(err); }
if (!result1) {
passport.authenticate('strategy2', function (err,result2){
if (err) { return next(err); }
if(!result2){
return res.redirect('/');}
req.login(result2, function (err){
if(err){return next(err)}
res.render('result2');
})
});
}
req.login(result1, function (err){
if (err){return next(err)}
console.log('admin login found');
res.render('result');
});
})(req, res, next);
});
但是我得到这个错误:
Error: Failed to serialize user into session
我已经实现了:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
我怀疑user 在第一个passport.authentication 调用中被序列化,然后它试图用第二个调用再次序列化它,我需要做的是在运行第二个策略之前再次反序列化它。
感谢您的帮助!
【问题讨论】:
-
可以用
done(null, JSON.stringify(user))替换序列化函数,用done(null, JSON.parse(user))替换解串函数吗?
标签: node.js passport.js