Получение информации о пользователе после входа в систему в node.js - PullRequest
0 голосов
/ 02 июля 2018

Я использую passport-local для аутентификации пользователей на моем сайте.

passport.use('login', new LocalStrategy({
            passReqToCallback : true
        },
        function(req, username, password, done) { 

            User.findOne({'local.username': username}, function(err, user) {
                if(err)
                    return done(err);
                if(!user){
                    console.log('User Not Found with username ');
                    return done(null, false);   
                }
                if(!isValidPassword(user, password)){
                    console.log('Invalid Password');
                    return done(null, false); // redirect back to login page
                }
                console.log('Successfully logged in user ');
                return done(null, user);
            });
        }
    ));

А вот как он маршрутизирует:

router.get('/success', function(req, res){
        res.send({state: 'success', user: req.user ? req.user : null});
    });
router.post('/login', passport.authenticate('login', {
        successRedirect: '/auth/success',
        failureRedirect: '/auth/failure'
    }));
router.get('/profile', function(req, res){
        res.render('profile.ejs', { user: req.user });
    });

Вот как я вызываю вышеуказанную функцию входа в систему в файле .ts:

let data = {
      username: this.username,
      password: this.password
  };

  this.http.post('http://127.0.0.1:3000/auth/login', data).pipe(
    map(res => res.json())
).subscribe(res=> {
  let alert = this.alertCtrl.create({
    title: 'Login Successful!',
    subTitle: 'You are logged in',
    buttons: ['Okay']
  });
  alert.present();
this.http.get('http://127.0.0.1:3000/auth/profile', res);

Здесь я должен получить все данные пользователя, пока пользователь входит в систему, не так ли? Если нет, то как получить все данные пользователя при входе в систему и отправить их в / profile?

1 Ответ

0 голосов
/ 02 июля 2018

Надеюсь, ваш паспорт и модель настроены правильно.

Попробуйте что-то вроде -

module.exports = function(app, passport) {

    // HOME PAGE 
    app.get('/', function(req, res) {
        res.render('index.ejs'); // load the index.ejs file
    });


    // LOGIN 
    app.get('/login', function(req, res) {    
        res.render('login.ejs', { message: req.flash('loginMessage') }); 
    });

    // PROFILE SECTION 
    app.get('/profile', isLoggedIn, function(req, res) {
        res.render('profile.ejs', {
            user : req.user // get the user out of session and pass to template
        });
    });    

};

// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {

    // user authentication in the session, carry on 
    if (req.isAuthenticated())
        return next();

    // user not authenticated, take to home page
    res.redirect('/');
}

А потом что-то вроде -

app.post('/login', passport.authenticate('local-login', {
        successRedirect : '/profile', // redirect to profile 
        failureRedirect : '/login'
    }));

Вы можете попытаться получить доступ к объекту пользователя внутри вашего шаблона, как - что-то похожее на <%= user.local.email %>, в зависимости от вашего механизма шаблонов.

...