fix: email validation flow, so that it actually works, fixed event logging bug, new email verification template

This commit is contained in:
Julian Lam
2021-07-23 17:22:19 -04:00
parent caf8968791
commit 3bcd1f1438
7 changed files with 38 additions and 13 deletions

View File

@@ -114,6 +114,8 @@ module.exports = function (User) {
if (userData.email && userData.uid > 1) {
User.email.sendValidationEmail(userData.uid, {
email: userData.email,
template: 'welcome',
subject: `[[email:welcome-to, ${meta.config.title || meta.config.browserTitle || 'NodeBB'}]]`,
}).catch(err => winston.error(`[user.create] Validation email failed to send\n[emailer.send] ${err.stack}`));
}
if (userNameChanged) {

View File

@@ -99,13 +99,14 @@ UserEmail.sendValidationEmail = async function (uid, options) {
});
const data = {
username: username,
confirm_link: confirm_link,
confirm_code: confirm_code,
uid,
username,
confirm_link,
confirm_code,
email: options.email,
subject: options.subject || `[[email:welcome-to, ${meta.config.title || meta.config.browserTitle || 'NodeBB'}]]`,
template: options.template || 'welcome',
uid: uid,
subject: options.subject || '[[email:email.verify-your-email.subject]]',
template: options.template || 'verify-email',
};
if (plugins.hooks.hasListeners('action:user.verify')) {
@@ -134,8 +135,8 @@ UserEmail.confirmByCode = async function (code) {
}
}
await user.setUserField(confirmObj.uid, 'email', confirmObj.email);
await Promise.all([
user.setUserField('email', confirmObj.email),
UserEmail.confirmByUid(confirmObj.uid),
db.delete(`confirm:${code}`),
]);

View File

@@ -262,8 +262,14 @@ User.addInterstitials = function (callback) {
const [isAdminOrGlobalMod, canEdit] = await Promise.all([
User.isAdminOrGlobalMod(data.req.uid),
privileges.users.canEdit(data.req.uid, userData.uid),
]);
if (isAdminOrGlobalMod || canEdit) {
// Admins editing will auto-confirm, unless editing their own email
if (isAdminOrGlobalMod && userData.uid !== data.req.uid) {
await User.setUserField(userData.uid, 'email', formData.email);
await User.email.confirmByUid(userData.uid);
} else if (canEdit) {
await User.email.sendValidationEmail(userData.uid, {
email: formData.email,
force: true,

View File

@@ -246,8 +246,6 @@ module.exports = function (User) {
if (newEmail) {
await User.email.sendValidationEmail(uid, {
email: newEmail,
subject: '[[email:email.verify-your-email.subject]]',
template: 'verify_email',
force: 1,
}).catch(err => winston.error(`[user.create] Validation email failed to send\n[emailer.send] ${err.stack}`));
}