登录node.js后获取用户信息

时间:2018-07-02 11:16:49

标签: node.js angular mongoose 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);

在这里,我应该在用户登录res时获取用户的所有数据,不是吗?如果不是这样,那么如何在登录时获取用户的所有数据并将其发送到/ profile?

1 个答案:

答案 0 :(得分:0)

希望您的护照和型号配置正确。

尝试类似-

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 %>