jaredhanson / passport

Simple, unobtrusive authentication for Node.js.
https://www.passportjs.org?utm_source=github&utm_medium=referral&utm_campaign=passport&utm_content=about
MIT License
22.93k stars 1.24k forks source link

Check Email and Username (Sign Up) #730

Closed Maeggi closed 5 years ago

Maeggi commented 5 years ago

Test with two findOne, not working. Error:

Caught exception: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

passport.use('local-signup', new LocalStrategy({
        usernameField: 'username',
        passwordField: 'password',
        emailField: 'email',
        passReqToCallback: true
    },
        function(req, username, email, done) {

            if(req.session.user && req.session){
                return done(null, false, {message: 'User is already logged in, signup illegal'});

            }

            User.findOne({ email }, function(err, user) {
                if (err) return done(err);

                if (!user) {
                    return done(null, false, {
                        message: 'This email already exists'
                    });
                }
            });

            User.findOne({ username }, function(err, user) {
                if (err) return done(err);

                if (!user) {
                    return done(null, false, {
                        message: 'This usernme already exists'
                    });
                }

                var newUser = new User();

                newUser.userName = req.body.userName;
                newUser.email = req.body.email;
                newUser.hash_password = bcrypt.hashSync(req.body.password, 10);

                newUser.save(error => {
                    if (err) {
                    console.log(err);
                    res.sendStatus(500);
                    return done(null, false, {
                        message: 'Error'
                    });
                }

                    return done(null, newUser);
                });
            });
        }
));
jaredhanson commented 5 years ago

This code will end up calling the done callback twice.