fix(Restwrite): Do not send verification email if users is authenticated using some auth provider (#2660) (#3882)

This commit is contained in:
Antonio Davi Macedo Coelho de Castro
2017-05-29 21:06:40 -03:00
committed by Florent Vilmart
parent 31744c59ef
commit 6cc99aa193
2 changed files with 40 additions and 3 deletions

View File

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

View File

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