Thursday, 27 April 2017

object Object error in signup with passport in express

I have a user model with id, password, and email. When I try to signup it shows [object Object] error in form and it doesn't post user data in the database. In the console, it shows POST /signup 302 -58. Here's part of my passport.js

// used to serialize the user for the session
passport.serializeUser(function(user, done) {
    done(null, user.id);
});

// used to deserialize the user
passport.deserializeUser(function(id, done) {
    User.findById(id).then(function(user){
        done(null, user);
    }).catch(function(e){
        done(e, false);
    });
});
 // =========================================================================
    // LOCAL SIGNUP ============================================================
    // =========================================================================
    passport.use('local-signup', new LocalStrategy({
        // by default, local strategy uses username and password, we will override with email
        usernameField : 'email',
        passwordField : 'password',
        passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
    },
    function(req, email, password, done) {        
        //  Whether we're signing up or connecting an account, we'll need
        //  to know if the email address is in use.

        User.findOne({ where: { email: email }})
            .then(function(existingUser) {

                // check to see if there's already a user with that email
                if (existingUser) 
                    return done(null, false, req.flash('loginMessage', 'That email is already taken.'));

                //  If we're logged in, we're connecting a new local account.
                if(req.user) {
                    var user            = req.user;
                    user.email    = email;
                    user.password = User.generateHash(password);
                    user.save().catch(function (err) {
                        throw err;
                    }).then (function() {
                        done(null, user);
                    });
                } 
                //  We're not logged in, so we're creating a brand new user.
                else {
                    // create the user
                    var newUser = User.build ({email: email, password: User.generateHash(password)});   
                    newUser.save().then(function() {done (null, newUser);}).catch(function(err) { done(null, false, req.flash('loginMessage', err));});
                }
            })
            .catch(function (e) {
                done(null, false, req.flash('loginMessage',e.name + " " + e.message));              
            })

    }));

And in routes.js

// locally --------------------------------
    // LOGIN ===============================
    // show the login form
    app.get('/login', function(req, res) {
        res.render('login.ejs', { message: req.flash('loginMessage') });
    });

    // process the login form
    app.post('/login', passport.authenticate('local-login', {
        successRedirect : '/profile', // redirect to the secure profile section
        failureRedirect : '/login', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));

    // SIGNUP =================================
    // show the signup form
    app.get('/signup', function(req, res) {
        res.render('signup.ejs', { message: req.flash('loginMessage') });
    });

    // process the signup form
    app.post('/signup', passport.authenticate('local-signup', {
        successRedirect : '/profile', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));



via Yanet Pedraza

No comments:

Post a Comment