diff --git a/common/models/user.js b/common/models/user.js index 4f67ad88e5..69b36b1b0b 100644 --- a/common/models/user.js +++ b/common/models/user.js @@ -492,7 +492,7 @@ module.exports = function(User) { User.decodeEmail = email => Buffer(email, 'base64').toString(); - User.prototype.requestAuthEmail = function requestAuthEmail() { + User.prototype.requestAuthEmail = function requestAuthEmail(isSignUp) { return Observable.defer(() => { const messageOrNull = getWaitMessage(this.emailAuthLinkTTL); if (messageOrNull) { @@ -509,11 +509,12 @@ module.exports = function(User) { return this.createAccessToken$({ ttl: 15 * 60 * 1000 }); }) .flatMap(token => { - // email verified will be false if the user instance - // has just been created - const renderAuthEmail = this.emailVerified === false ? - renderSignInEmail : - renderSignUpEmail; + let renderAuthEmail = renderSignInEmail; + let subject = 'Login Requested - freeCodeCamp'; + if (isSignUp) { + renderAuthEmail = renderSignUpEmail; + subject = 'Account Created - freeCodeCamp'; + } const { id: loginToken, created: emailAuthLinkTTL } = token; const loginEmail = this.getEncodedEmail(); const host = getServerFullURL(); @@ -521,7 +522,7 @@ module.exports = function(User) { type: 'email', to: this.email, from: getEmailSender(), - subject: 'Login Requested - freeCodeCamp', + subject, text: renderAuthEmail({ host, loginEmail, @@ -534,10 +535,17 @@ module.exports = function(User) { this.update$({ emailAuthLinkTTL }) ); }) - .map(() => dedent` - If you entered a valid email, a magic link is on its way. - Please follow that link to sign in. - `); + .map(() => isSignUp ? + dedent` + We've created a new account for you. + If you entered a valid email, a magic link is on its way. + Please follow that link to sign in. + ` : + dedent` + If you entered a valid email, a magic link is on its way. + Please follow that link to sign in. + ` + ); }; User.prototype.requestUpdateEmail = function requestUpdateEmail(newEmail) { diff --git a/server/boot/authentication.js b/server/boot/authentication.js index 1e8096ae7c..0b52df3299 100644 --- a/server/boot/authentication.js +++ b/server/boot/authentication.js @@ -237,11 +237,14 @@ module.exports = function enableAuthentication(app) { } return User.findOne$({ where: { email } }) - .flatMap(user => ( - // if no user found create new user and save to db - user ? Observable.of(user) : User.create$({ email }) - )) - .flatMap(user => user.requestAuthEmail()) + .flatMap(_user => Observable.if( + // if no user found create new user and save to db + _.constant(_user), + Observable.of(_user), + User.create$({ email }) + ) + .flatMap(user => user.requestAuthEmail(!_user)) + ) .do(msg => res.status(200).send({ message: msg })) .subscribe(_.noop, next); }