diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index d89285904c..9dd7762ebd 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -3003,4 +3003,35 @@ describe('Parse.User testing', () => { done(); }, done.fail); }); + + it('should not send a verification email if the user signed up using oauth', (done) => { + let emailCalledCount = 0; + const emailAdapter = { + sendVerificationEmail: () => { + emailCalledCount++; + return Promise.resolve(); + }, + sendPasswordResetEmail: () => Promise.resolve(), + sendMail: () => Promise.resolve() + } + reconfigureServer({ + appName: 'unused', + verifyUserEmails: true, + emailAdapter: emailAdapter, + publicServerURL: "http://localhost:8378/1" + }); + const user = new Parse.User(); + user.set('email', 'email1@host.com'); + Parse.FacebookUtils.link(user, { + id: "8675309", + access_token: "jenny", + expiration_date: new Date().toJSON() + }).then((user) => { + user.set('email', 'email2@host.com'); + user.save().then(() => { + expect(emailCalledCount).toBe(0); + done(); + }); + }); + }); }); diff --git a/src/RestWrite.js b/src/RestWrite.js index 530b2dba29..24015024e4 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -444,9 +444,15 @@ RestWrite.prototype._validateEmail = function() { if (results.length > 0) { throw new Parse.Error(Parse.Error.EMAIL_TAKEN, 'Account already exists for this email address.'); } - // We updated the email, send a new validation - this.storage['sendVerificationEmail'] = true; - this.config.userController.setEmailVerifyToken(this.data); + if ( + !this.data.authData || + !Object.keys(this.data.authData).length || + Object.keys(this.data.authData).length === 1 && Object.keys(this.data.authData)[0] === 'anonymous' + ) { + // We updated the email, send a new validation + this.storage['sendVerificationEmail'] = true; + this.config.userController.setEmailVerifyToken(this.data); + } }); };