Regenerate Email Verification Token on Email Request (#4439)

* regenerate email verification token & expiration in /verificationEmailRequest

* Remove password field when saving on postgres
This commit is contained in:
Benjamin Wilson Friedman
2018-02-01 15:35:08 -08:00
committed by Florent Vilmart
parent f2e21b0538
commit db8594dd33
3 changed files with 48 additions and 11 deletions

View File

@@ -135,13 +135,23 @@ export class UserController extends AdaptableController {
});
}
/**
* Regenerates the given user's email verification token
*
* @param user
* @returns {*}
*/
regenerateEmailVerifyToken(user) {
this.setEmailVerifyToken(user);
return this.config.database.update('_User', { username: user.username }, user);
}
resendVerificationEmail(username) {
return this.getUserIfNeeded({username: username}).then((aUser) => {
if (!aUser || aUser.emailVerified) {
throw undefined;
}
this.setEmailVerifyToken(aUser);
return this.config.database.update('_User', {username}, aUser).then(() => {
return this.regenerateEmailVerifyToken(aUser).then(() => {
this.sendVerificationEmail(aUser);
});
});

View File

@@ -268,14 +268,19 @@ export class UsersRouter extends ClassesRouter {
throw new Parse.Error(Parse.Error.EMAIL_NOT_FOUND, `No user found with email ${email}`);
}
const user = results[0];
// remove password field, messes with saving on postgres
delete user.password;
if (user.emailVerified) {
throw new Parse.Error(Parse.Error.OTHER_CAUSE, `Email ${email} is already verified.`);
}
const userController = req.config.userController;
userController.sendVerificationEmail(user);
return { response: {} };
return userController.regenerateEmailVerifyToken(user).then(() => {
userController.sendVerificationEmail(user);
return { response: {} };
});
});
}