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)
});
我 运行 遇到了 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)
});