Creating a user via social auth, merging and modifying appropriately
You can organize better your asynchronous code. 

Turn something like this:

Promisse.then(function() {
    Promisse.then(function() {
        promisse.then(function()) {
        }, function() { error })
    }, function() { error })
}, function() { error })


Into something like:

Promisse.then(function() {
}).then(function() {
}).then(function(){
}).catch(function () { failure &amp;&amp; failure(); })


Another tip would be creating a function User.create and other called User.merge (this will make debugging easier; read about the Single-responsiblity principle to know more in depth why).