Подтвердить что ты не робот

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 login info here?
    console.log(req.user);  // <------ this outputs undefined
});

Я проверил другие вопросы по SO, но я не уверен, что я делаю неправильно здесь. Спасибо!

4b9b3361

Ответ 1

Вам необходимо убедиться, что вы зарегистрировали промежуточное программное обеспечение, которое заполняет 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 ...

});

Ответ 2

Поздно вечеринке, но нашла это без ответа после того, как я сам ответила на него.

Внутри запроса будет 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});
    }

Ответ 3

Ссылаясь на документацию Passport, пользовательский объект содержится в req.user. Увидеть ниже.

    app.post('/login',
      passport.authenticate('local'),function(req, res) {
       // If this function gets called, authentication was successful.
       // 'req.user' contains the authenticated user.
       res.redirect('/users/' + req.user.username);
     });

Таким образом, вы можете получить доступ к своему объекту пользователя со страницы, на которую вы перенаправляете.

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