Browse Source

fix(email-plugin): Add filter of emailVerificationHandler

Relates to #438
Michael Bromley 5 years ago
parent
commit
a68b18e3c0
1 changed files with 17 additions and 9 deletions
  1. 17 9
      packages/email-plugin/src/default-email-handlers.ts

+ 17 - 9
packages/email-plugin/src/default-email-handlers.ts

@@ -2,6 +2,7 @@
 import {
     AccountRegistrationEvent,
     IdentifierChangeRequestEvent,
+    NativeAuthenticationMethod,
     OrderStateTransitionEvent,
     PasswordResetEvent,
 } from '@vendure/core';
@@ -17,39 +18,46 @@ import {
 
 export const orderConfirmationHandler = new EmailEventListener('order-confirmation')
     .on(OrderStateTransitionEvent)
-    .filter((event) => event.toState === 'PaymentSettled' && !!event.order.customer)
-    .setRecipient((event) => event.order.customer!.emailAddress)
+    .filter(event => event.toState === 'PaymentSettled' && !!event.order.customer)
+    .setRecipient(event => event.order.customer!.emailAddress)
     .setFrom(`{{ fromAddress }}`)
     .setSubject(`Order confirmation for #{{ order.code }}`)
-    .setTemplateVars((event) => ({ order: event.order }))
+    .setTemplateVars(event => ({ order: event.order }))
     .setMockEvent(mockOrderStateTransitionEvent);
 
 export const emailVerificationHandler = new EmailEventListener('email-verification')
     .on(AccountRegistrationEvent)
-    .setRecipient((event) => event.user.identifier)
+    .filter(event => !!event.user.getNativeAuthenticationMethod().identifier)
+    .filter(event => {
+        const nativeAuthMethod = event.user.authenticationMethods.find(
+            m => m instanceof NativeAuthenticationMethod,
+        ) as NativeAuthenticationMethod | undefined;
+        return (nativeAuthMethod && !!nativeAuthMethod.identifier) || false;
+    })
+    .setRecipient(event => event.user.identifier)
     .setFrom(`{{ fromAddress }}`)
     .setSubject(`Please verify your email address`)
-    .setTemplateVars((event) => ({
+    .setTemplateVars(event => ({
         verificationToken: event.user.getNativeAuthenticationMethod().verificationToken,
     }))
     .setMockEvent(mockAccountRegistrationEvent);
 
 export const passwordResetHandler = new EmailEventListener('password-reset')
     .on(PasswordResetEvent)
-    .setRecipient((event) => event.user.identifier)
+    .setRecipient(event => event.user.identifier)
     .setFrom(`{{ fromAddress }}`)
     .setSubject(`Forgotten password reset`)
-    .setTemplateVars((event) => ({
+    .setTemplateVars(event => ({
         passwordResetToken: event.user.getNativeAuthenticationMethod().passwordResetToken,
     }))
     .setMockEvent(mockPasswordResetEvent);
 
 export const emailAddressChangeHandler = new EmailEventListener('email-address-change')
     .on(IdentifierChangeRequestEvent)
-    .setRecipient((event) => event.user.getNativeAuthenticationMethod().pendingIdentifier!)
+    .setRecipient(event => event.user.getNativeAuthenticationMethod().pendingIdentifier!)
     .setFrom(`{{ fromAddress }}`)
     .setSubject(`Please verify your change of email address`)
-    .setTemplateVars((event) => ({
+    .setTemplateVars(event => ({
         identifierChangeToken: event.user.getNativeAuthenticationMethod().identifierChangeToken,
     }))
     .setMockEvent(mockEmailAddressChangeEvent);