Passport.js:身份验证后如何访问用户对象?

新手上路,请多包涵

我正在使用 Passport.js 使用用户名和密码登录用户。我实质上是在使用 Passport 站点中的示例代码。以下是我的代码的相关部分(我认为):

 app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(obj, done) {
    done(null, obj);
});

passport.use(new LocalStrategy(function(username, password, done) {
    User.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.' });
        }
        return done(null, user);
        });
    }
));

app.post('/login',
    passport.authenticate('local', { failureRedirect: '/login/fail', failureFlash: false }),
    function(req, res) {
        // Successful login
        //console.log("Login successful.");
        // I CAN ACCESS req.user here
});

这似乎正确登录。但是,我希望能够在代码的其他部分访问登录用户的信息,例如:

 app.get('/test', function(req, res){
    // How can I get the user's login info here?
    console.log(req.user);  // <------ this outputs undefined
});

我已经检查了关于 SO 的其他问题,但我不确定我在这里做错了什么。谢谢!

原文由 kurisukun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 939
2 个回答

在注册护照 中间件 之前,您需要确保注册一个填充 req.session 的中间件。

例如下面使用 express cookieSession 中间件

app.configure(function() {

  // some code ...

  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.cookieSession()); // Express cookie session middleware
  app.use(passport.initialize());   // passport initialize middleware
  app.use(passport.session());      // passport session middleware

  // more code ...

});

原文由 250R 发布,翻译遵循 CC BY-SA 3.0 许可协议

晚会迟到了,但在我自己用谷歌搜索答案后发现这个问题没有得到解答。

在请求中将是一个 req.user 对象,您可以使用它。

像这样的路线:

 app.get('/api/portfolio', passport.authenticate('jwt', { session: false }), stocks.buy);

像这样的控制器:

 buy: function(req, res) {
      console.log(req.body);
      //res.json({lel: req.user._id});
      res.json({lel: req.user});
    }

原文由 Darcys22 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题