Skip to content

Instantly share code, notes, and snippets.

@bnoguchi
Created August 18, 2011 19:46
Show Gist options
  • Save bnoguchi/1154982 to your computer and use it in GitHub Desktop.
Save bnoguchi/1154982 to your computer and use it in GitHub Desktop.
findOrCreateUser
findOrCreateUser: function (sess, accessTok, accessTokExtra, fbUser) {
var promise = this.Promise()
, User = this.User()();
if(sess.auth == null || sess.auth.userId == null) {
User.findOne({'fb.id': fbUser.id}, function (err, foundUser) {
if (foundUser) {
if( foundUser.confirmed ) {
return promise.fulfill(foundUser);
} else {
assignFbDataToUser(foundUser, accessTok, accessTokExtra, fbUser);
confirmed = true;
foundUser.save( function (err, user) {
if (err) return promise.fail(err);
return promise.fulfill(user);
});
}
} else {
console.log("CREATING");
User.createWithFB(fbUser, accessTok, accessTokExtra.expires, function (err, createdUser) {
if (err) return promise.fail(err);
assignFbDataToUser(createdUser, accessTok, accessTokExtra, fbUser);
createdUser.confirmed = true;
// Save the new data to the user doc in the db
createdUser.save( function (err, user) {
if (err) return promise.fail(err);
return promise.fulfill(createdUser);
});
});
}
});
} else {
User.findById(sess.auth.userId, function (err, user) {
if (err) return promise.fail(err);
if (!user) {
User.where('password.login', fbUser.email).findOne( function (err, user) {
if (err) return promise.fail(err);
if (!user) {
User.createWithFB(fbUser, accessTok, accessTokExtra.expires, function (err, createdUser) {
if (err) return promise.fail(err);
return promise.fulfill(createdUser);
});
} else {
assignFbDataToUser(user, accessTok, accessTokExtra, fbUser);
user.save( function (err, user) {
if (err) return promise.fail(err);
promise.fulfill(user);
});
}
});
} else {
assignFbDataToUser(user, accessTok, accessTokExtra, fbUser);
// Save the new data to the user doc in the db
user.save( function (err, user) {
if (err) return promise.fail(err);
promise.fuilfill(user);
});
}
});
}
return promise;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment