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);
})
});
};