exports.initPassportLocalStrategy = function () {
passport.use(new LocalStrategy(
{
session: false
},
function(username, password, done) {
UserProxy.validateUserWithPassword(username, password)
.then(function (user) {
if(user) done(null, user);
else done(null, false);
})
.catch(done);
}
));
passport.serializeUser(function(user, cb) {
cb(null, user);
});
};
我正在实现一个基于令牌的身份验证中间件而没有看到。所以我想知道为什么我需要提供serialzeUser
功能?我已经读过,原因是将用户或其某些属性放入会话中,然后desearlizeUser
将从会话中检索整个对象并将其放入req.user
。
所以这是我的问题:
为什么不能完成(null,user);在LocalStrategy
函数中将用户置于req.user
?为什么甚至打扰序列化和deserailie?
如果删除searlizeUser
函数,我会收到错误,但是我可以在没有deserilzeUser
函数的情况下离开,为什么?在这种情况下,谁将用户对象放到req.user
?
非常感谢。
答案 0 :(得分:2)
您不需要序列化/反序列化。您的设置略有错误。
您需要将session: false
移出策略并进入passport.authenticate
。这是因为策略无法做出决定,而是依赖于您的路由,您需要哪种身份验证。
passport.use(new LocalStrategy(
function(username, password, done) {
UserProxy.validateUserWithPassword(username, password)
.then(function (user) {
if(user) done(null, user);
else done(null, false);
})
.catch(done);
}
));
app.use(passport.initialize());
app.post('/auth', passport.authenticate(
'local', {
session: false // here goes the session false
}), doWhateverYourSetupNeeds);