From 6cafd46d06d1663837a0459c2e01bd7d443de1f7 Mon Sep 17 00:00:00 2001 From: Simon Bengtsson Date: Sat, 27 Feb 2016 15:54:43 +0100 Subject: [PATCH 1/2] Validate authData before triggering beforeSave --- src/RestWrite.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/RestWrite.js b/src/RestWrite.js index 4922f71d58..3e1c2f6af5 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -67,12 +67,12 @@ RestWrite.prototype.execute = function() { return this.handleInstallation(); }).then(() => { return this.handleSession(); + }).then(() => { + return this.validateAuthData(); }).then(() => { return this.runBeforeTrigger(); }).then(() => { return this.setRequiredFieldsIfNeeded(); - }).then(() => { - return this.validateAuthData(); }).then(() => { return this.transformUser(); }).then(() => { @@ -134,6 +134,10 @@ RestWrite.prototype.validateSchema = function() { // Runs any beforeSave triggers against this operation. // Any change leads to our data being mutated. RestWrite.prototype.runBeforeTrigger = function() { + if (this.response) { + return; + } + // Avoid doing any setup for triggers if there is no 'beforeSave' trigger for this class. if (!triggers.triggerExists(this.className, triggers.Types.beforeSave, this.config.applicationId)) { return Promise.resolve(); From 4eb9bd442f6736a2383a1ea281520d0d2e29e5d8 Mon Sep 17 00:00:00 2001 From: Simon Bengtsson Date: Sat, 27 Feb 2016 15:57:44 +0100 Subject: [PATCH 2/2] Adds test that makes sure beforeSave is not called on User when logging in with a provider --- spec/ParseUser.spec.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index 424e4207f0..a36b3cdcba 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -1026,6 +1026,32 @@ describe('Parse.User testing', () => { }); }); + it("login with provider should not call beforeSave trigger", (done) => { + var provider = getMockFacebookProvider(); + Parse.User._registerAuthenticationProvider(provider); + Parse.User._logInWith("facebook", { + success: function(model) { + Parse.User.logOut(); + + Parse.Cloud.beforeSave(Parse.User, function(req, res) { + res.error("Before save shouldn't be called on login"); + }); + + Parse.User._logInWith("facebook", { + success: function(innerModel) { + Parse.Cloud._removeHook('Triggers', 'beforeSave', Parse.User.className); + done(); + }, + error: function(model, error) { + ok(undefined, error); + Parse.Cloud._removeHook('Triggers', 'beforeSave', Parse.User.className); + done(); + } + }); + } + }); + }); + it("link with provider", (done) => { var provider = getMockFacebookProvider(); Parse.User._registerAuthenticationProvider(provider);