Паспорт. js Зарегистрируйтесь, чтобы войти в систему через почтовый запрос. - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблема с Passport. js, из-за которой я хочу получить информацию о пользователях, вошедших в данный момент в систему, из запроса Post и обработать некоторые вещи. Когда я console.log (req.user), он появляется как «неопределенный». Все настройки и аутентификация работают, я также могу получить информацию о пользователе, используя запрос 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
    });
});

^ возвращает имя пользователя, как и ожидалось

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

^ возвращает неопределенное значение, даже когда пользователь вошел в систему.

Я видел тот же вопрос, поднятый здесь Как получить req.user в запросе POST, используя паспорт js два года go но ответа не было.

1 Ответ

0 голосов
/ 20 апреля 2020

Это потому, что пользователь может не войти в систему во время проверки.

Чтобы гарантировать, что пользователь вошел в систему при доступе к маршруту, у вас должно быть промежуточное программное обеспечение, которое проверяет его для вас.

Вы можете написать его как отдельный модуль и импортировать его в каждый из ваших маршрутов, если это необходимо.

Модуль:

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

Маршруты:

//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)
});
...