samedi 9 septembre 2017

Mongoose/Passportjs registration - if (err) always returns true

I'm trying to use passport to register a user to a databse in an express app. I have an if (err) statement that seemingly always returns true. When I submit my registration form, I want to check for any errors, and display them if there are any; if there are no errors, I would like to add the user to my MongoDB database. My app.js file looks like this:

var express = require('express'),
    mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    app = express(),
    bodyParser = require('body-parser'),
    session = require('express-session'),
    passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy;

var Connection = mongoose.createConnection('mongodb://localhost:27017/customerapp', function (err) {
   mongoose.Promise = global.Promise;
    if (err) {
        return console.log(err)
    }

    //Mongoose Schema
    var userSchema = new Schema({
        username: String,
        email: String,
        password: String
    });
    var User = mongoose.model('User', userSchema);
});

    //View Engine
    app.set('view engine', 'ejs');
    //Middleware
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(session({
        secret: 'dskjfhewfsdfsdfe',
        resave: true,
        saveUninitialized: true
    }));

    //Passport Middleware
    app.use(passport.initialize());
    app.use(passport.session());

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

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

    //Register Strategy
    passport.use('registerUser', new LocalStrategy(
        { passReqToCallback: true },
        function (req, username, password, done) {
            var newUser = new User({
                username: username,
                password: password,
                email: req.body.email
            });

            newUser.save(function (err) {
                if (err) {
                    return done(err);
                }
                return done(null, newUser);
            });
        }
    ));

    //Define routes
    app.route('/register').get(function (req, res) {
        res.render('register');
    })
    .post(function (req, res, next) {
        passport.authenticate('registerUser', function(err, user, info) {
        if (err) {

            return res.json({ err: err, info: info});

        }
        res.send(user);

    })(req, res, next);
});

every time i try to submit my registration form, i get the following page:

{"err":{}} 

(as in, that is all the source code for the page). Does anyone know what I'm doing wrong? Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire