Node.js Passport.js-req.session.Passport.user未显示

Node.js Passport.js-req.session.Passport.user未显示,node.js,express,passport.js,Node.js,Express,Passport.js,我将Passport.js与Express一起使用-由于某些原因,req.session.Passport.user值不存在,而应该存在,如您所见: 以下是我的passport配置: passport.serializeUser(function (user, done) { console.log(colors.bgRed('serialize user called, user:', user)); done(null, user._id);

我将Passport.js与Express一起使用-由于某些原因,req.session.Passport.user值不存在,而应该存在,如您所见:

以下是我的passport配置:

   passport.serializeUser(function (user, done) {
        console.log(colors.bgRed('serialize user called, user:', user));
        done(null, user._id);
    });

    passport.deserializeUser(function (id, done) {
        console.log(colors.bgRed('deserialize user called, user_id:', id));
        UserModel.getNewUser().findById(id, function (err, user) {
            console.log(colors.bgRed('deserialize find user called, user:', user));
            done(err, user);
        });
    });

    passport.use('local', new LocalStrategy(function (username, password, done) {
        UserModel.getNewUser().findOne({
            username: username
        }, function (err, user) {
            if (err) {
                return done(err);
            }
            if (!user) {
                return done(null, false, {
                    message: 'Incorrect username.'
                });
            }
            if (!user.validPassword(password)) {
                return done(null, false, {
                    message: 'Incorrect password.'
                });
            }
            // req.user = user;
            return done(null, user);
        });
    }));

有人知道会出什么问题吗?我唯一的猜测是,我可能需要使用会话对象而不是用户id进行反序列化,但我认为这是错误的。我知道一个事实,反序列化用户和序列化用户根本没有被调用。

很难在网上找到这个问题的答案,所以我认为应该在这里找到答案

问题是因为没有使用此选项:

    app.post('/login', passport.authenticate('local', { successRedirect: '/',
 failureRedirect: '/login' }));
…我决定在Passport中使用这种通话方式:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});
最初我的代码是这样的:

passport.authenticate('local', function (err, user, info) {
        if (err) {
            return next(err);
        }
        if (!user) {

            registerUser(req,res,next);
        }
        else{

                res.locals.loggedInUser = user._doc;
                res.json({alreadyRegistered: !justRegistered,msg:user._doc});

        }

    })(req, res, next);
但后来我用req.logIn更新了它,如下所示:

passport.authenticate('local', function (err, user, info) {
        if (err) {
            return next(err);
        }
        if (!user) {

            console.log('no account found, so we will register user as expected...');
            registerUser(req,res,next);
        }
        else{

            req.logIn(user, function (err) {   //this is crucial

                if(err){
                    return next(err);
                }

                res.locals.loggedInUser = user._doc;
                res.json({alreadyRegistered: !justRegistered,msg:user._doc});
            });
        }

    })(req, res, next);

现在它工作了——应该更好地遵循文档。我建议Jared Hansson在我刚刚在上面标记的文档中输入“这是至关重要的”。否则,是的,我应该更密切地关注文档。

很难在网上找到答案,所以我认为应该在这里找到答案

问题是因为没有使用此选项:

    app.post('/login', passport.authenticate('local', { successRedirect: '/',
 failureRedirect: '/login' }));
…我决定在Passport中使用这种通话方式:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});
最初我的代码是这样的:

passport.authenticate('local', function (err, user, info) {
        if (err) {
            return next(err);
        }
        if (!user) {

            registerUser(req,res,next);
        }
        else{

                res.locals.loggedInUser = user._doc;
                res.json({alreadyRegistered: !justRegistered,msg:user._doc});

        }

    })(req, res, next);
但后来我用req.logIn更新了它,如下所示:

passport.authenticate('local', function (err, user, info) {
        if (err) {
            return next(err);
        }
        if (!user) {

            console.log('no account found, so we will register user as expected...');
            registerUser(req,res,next);
        }
        else{

            req.logIn(user, function (err) {   //this is crucial

                if(err){
                    return next(err);
                }

                res.locals.loggedInUser = user._doc;
                res.json({alreadyRegistered: !justRegistered,msg:user._doc});
            });
        }

    })(req, res, next);

现在它工作了——应该更好地遵循文档。我建议Jared Hansson在我刚刚在上面标记的文档中输入“这是至关重要的”。否则,是的,我应该更仔细地跟踪文档。

它不应该存储在
req.user.\u id
?(或者只是
req.user)
问题似乎是一些配置问题-正如我提到的-我确实知道一个事实,反序列化用户和序列化用户根本没有被调用。我有另一个Express应用程序可以运行,并且调用了这两个方法。它不应该存储在
req.user.\u id
?(或者只是
req.user)
问题似乎是一些配置问题-正如我提到的-我确实知道一个事实,反序列化用户和序列化用户根本没有被调用。我有另一个Express应用程序可以运行,这两个方法都会被调用。