Passport.js 通过 Post 请求获取当前登录用户

Passport.js get currently logged in user through Post request

我 运行 遇到了 Passport.js 的问题,我想从 Post 请求中获取当前登录的用户信息并处理一些东西。当我 console.log(req.user) 时,它显示为 'undefined'。设置和身份验证一切正常,我还可以使用 Get 请求检索用户信息,如第一个代码片段所示。

router.get('/', function(req , res){
    console.log("The current logged in user is: " + req.user.first_name);
    res.render('index.ejs' , {
        user: req.user
    });
});

^ returns 用户名符合预期

router.post('/testPost' ,function(req , res){
    console.log("The current logged in user is: " + req.user);
    res.json({
        status: "success" 
     });
});

^returns 即使用户已登录也未定义。

两年前我在这里How to get req.user in POST request using passport js看到过同样的问题,但没有答案。

这是因为您检查时用户可能尚未登录。

为确保用户在访问路由时已登录,您应该有一个中间件来为您检查它。

您可以将其编写为一个单独的模块,并在需要时将其导入到您的每条路线中。

The module:

module.exports = {
    EnsureAuthenticated: (req, res, next) => {
        if (req.isAuthenticated()) {
            return next();
        } else {
            res.sendStatus(401);
        }
    }
};

The routes:

//Destructuring | EnsureAuth Function
const {
    EnsureAuthenticated
} = require('../path/to/the/module');


//You should get your user here
router.get('/', EnsureAuthenticated, (req, res) => {
console.log(req.user)
});