v0.0.12 Signup - zhentian-wan/MEANAppsFiles GitHub Wiki

Server

Server validation

For the schema, check firstName, lastName and username, should be required and username should be unique.

var userSchema = mongoose.Schema({
    firstName: {type:String, required: '{PATH} is required!'},
    lastName: {type:String, required: '{PATH} is required!'},
    username: {type:String, required: '{PATH} is required!', unique: true},
    salt: String,
    hash_pwd: String,
    role: [String]
});

When create a new user, put all into the lower case:

exports.createUser = function(req, res, next) {
    var userData = req.body;
    userData.username = userData.username.toLowerCase();
    userData.salt = encrypt.createSalt();
    userData.hash_pwd = encrypt.hashPwd(userData.salt, userData.password);

    User.create(userData, function(err, user) {
        if(err) {
            if(err.toString().indexOf('E11000') > -1) {
                err = new Error('Duplicate name');
            }
            res.status(400);
            res.send({reason: err.toString()});
        }

        req.login(user, function(err) {
            if(err) {return next(err);}
            res.send(user);
        });
    });
};

When auth, also convert to the lower case:

exports.auth = function(req, res, next){

    req.body.username = req.body.username.toLowerCase();
    var auth = passport.authenticate('local', function(err, user){

        if(err){
            return next(err);
        }

        if(!user){
            res.send({success: false});
        }

        req.logIn(user, function(err){
            if(err) {return next(err);}
            res.send({success: true, user: user});
        })
    });

    auth(req, res, next);
};

Server signup

app.post('/api/users', users.createUser);

Client

Add a route for sign up

            .when('/signup', {
                templateUrl: '/partials/account/signup',
                controller: 'SignupController'
            });

Use $resource's object's $save() function to do a post call.

    service.createNewUser = function(newUserData) {
        var newUser = new UserResource(newUserData);
        return $q(function(resolve, reject) {
            newUser.$save().then(function() {
                IdentityFactory.currentUser = newUser;
                resolve();
            }, function(response) {
                reject(response.data.reason);
            })
        });
    };