user3128668
user3128668

Reputation: 157

Get Entered Data after authentication success

Iam using Express NodeJs, Passport, connect-flash, mongoose

My prob is: Iam unable to understand how to retreive username, password in the next rendered page.

Please someone suggest me on how to achieve this..

app.js

var http = require('http');
var express =  require('express'),
    passport = require('passport')
    , LocalStrategy = require('passport-local').Strategy,
    flash = require('connect-flash'),
    User = require('./routes/userdao.js');


passport.use(new LocalStrategy(
    function(username, password, done) {
        User.findOne({ uname: username ,pwd:password}, function(err, user) {
            if (err) { return done(err); }
            if (!user) {
                return done(null, false, { message: 'Incorrect username.' });
            }
            return done(null, user);
        });
    }
));


passport.serializeUser(function(user, done) {
    done(null, user._id);
});

passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        done(err, user);
    });
});


var app = express();


app.configure(function(){
    app.use(express.logger('dev'));     /* 'default', 'short', 'tiny', 'dev' */
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.session({ secret: 'mysecret' }));
    app.use(flash());
    app.use(passport.initialize());
    app.use(passport.session());
    app.engine('.html', require('ejs').__express);
    app.set('view engine', 'html');
    app.set('views', __dirname + '/views');
    app.use(app.router);
    // app.use(express.errorHandler());

}).listen(3000);

console.log('Listening on port 3000...');
app.get('/',function(req,res){
  /*  req.flash('info', 'Flash is back!')
    res.redirect('/success');*/
    res.render('home.ejs');
});

app.get('/login',function(req,res){
    res.render('login.ejs');
});

app.get('/success',function(req,res){
    res.render('success.ejs',{ uname : req.user.username }); 
});

app.post('/login',
    passport.authenticate('local', { successRedirect: '/success', failureRedirect: '/login',
        failureFlash: true  }));

success.ejs

<%= uname %> // I WANT TO RETREIVE USERNAME HERE WHICH WAS ENTERED IN LOGIN PAGE..

Upvotes: 1

Views: 255

Answers (1)

lukaszfiszer
lukaszfiszer

Reputation: 2631

When your passport.deserializeUser returns the user data, passport populates req.user object with it. You will need to pass this object to the template as a second param of the res.render method, in your route handler:

app.js

(...)
app.get('/success', function(req, res, next){
    res.render('user', { user: req.user })
});

success.ejs

<%= user.uname %>

Upvotes: 1

Related Questions