@@ -144,7 +144,9 @@ export interface UserVerificationConfig {
144
144
* The email body template for the verification email sent to the user upon sign up.
145
145
* See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html to
146
146
* learn more about message templates.
147
- * @default 'Hello {username}, Your verification code is {####}'
147
+ *
148
+ * @default - 'Hello {username}, Your verification code is {####}' if VerificationEmailStyle.CODE is chosen,
149
+ * 'Hello {username}, Verify your account by clicking on {##Verify Email##}' if VerificationEmailStyle.LINK is chosen.
148
150
*/
149
151
readonly emailBody ?: string ;
150
152
@@ -159,7 +161,9 @@ export interface UserVerificationConfig {
159
161
* The message template for the verification SMS sent to the user upon sign up.
160
162
* See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html to
161
163
* learn more about message templates.
162
- * @default 'The verification code to your new account is {####}'
164
+ *
165
+ * @default - 'The verification code to your new account is {####}' if VerificationEmailStyle.CODE is chosen,
166
+ * not configured if VerificationEmailStyle.LINK is chosen
163
167
*/
164
168
readonly smsMessage ?: string ;
165
169
}
@@ -486,24 +490,15 @@ export class UserPool extends Resource implements IUserPool {
486
490
}
487
491
}
488
492
489
- const emailVerificationSubject = props . userVerification ?. emailSubject ?? 'Verify your new account' ;
490
- const emailVerificationMessage = props . userVerification ?. emailBody ?? 'Hello {username}, Your verification code is {####}' ;
491
- const smsVerificationMessage = props . userVerification ?. smsMessage ?? 'The verification code to your new account is {####}' ;
492
-
493
- const defaultEmailOption = props . userVerification ?. emailStyle ?? VerificationEmailStyle . CODE ;
494
- const verificationMessageTemplate : CfnUserPool . VerificationMessageTemplateProperty =
495
- ( defaultEmailOption === VerificationEmailStyle . CODE ) ? {
496
- defaultEmailOption,
497
- emailMessage : emailVerificationMessage ,
498
- emailSubject : emailVerificationSubject ,
499
- smsMessage : smsVerificationMessage ,
500
- } : {
501
- defaultEmailOption,
502
- emailMessageByLink : emailVerificationMessage ,
503
- emailSubjectByLink : emailVerificationSubject ,
504
- smsMessage : smsVerificationMessage
505
- } ;
506
-
493
+ const verificationMessageTemplate = this . verificationMessageConfiguration ( props ) ;
494
+ let emailVerificationMessage ;
495
+ let emailVerificationSubject ;
496
+ let smsVerificationMessage ;
497
+ if ( verificationMessageTemplate . defaultEmailOption === VerificationEmailStyle . CODE ) {
498
+ emailVerificationMessage = verificationMessageTemplate . emailMessage ;
499
+ emailVerificationSubject = verificationMessageTemplate . emailSubject ;
500
+ smsVerificationMessage = verificationMessageTemplate . smsMessage ;
501
+ }
507
502
const inviteMessageTemplate : CfnUserPool . InviteMessageTemplateProperty = {
508
503
emailMessage : props . userInvitation ?. emailBody ,
509
504
emailSubject : props . userInvitation ?. emailSubject ,
@@ -664,6 +659,42 @@ export class UserPool extends Resource implements IUserPool {
664
659
} ) ;
665
660
}
666
661
662
+ private verificationMessageConfiguration ( props : UserPoolProps ) : CfnUserPool . VerificationMessageTemplateProperty {
663
+ const emailStyle = props . userVerification ?. emailStyle ?? VerificationEmailStyle . CODE ;
664
+ const emailSubject = props . userVerification ?. emailSubject ?? 'Verify your new account' ;
665
+
666
+ if ( emailStyle === VerificationEmailStyle . CODE ) {
667
+ const emailMessage = props . userVerification ?. emailBody ?? 'Hello {username}, Your verification code is {####}' ;
668
+ const smsMessage = props . userVerification ?. smsMessage ?? 'The verification code to your new account is {####}' ;
669
+ if ( emailMessage . indexOf ( '{####}' ) < 0 ) {
670
+ throw new Error ( `Verification email body must contain the template string '{####}'` ) ;
671
+ }
672
+ if ( smsMessage . indexOf ( '{####}' ) < 0 ) {
673
+ throw new Error ( `SMS message must contain the template string '{####}'` ) ;
674
+ }
675
+ return {
676
+ defaultEmailOption : VerificationEmailStyle . CODE ,
677
+ emailMessage,
678
+ emailSubject,
679
+ smsMessage,
680
+ } ;
681
+ } else {
682
+ if ( props . userVerification ?. smsMessage !== undefined ) {
683
+ throw new Error ( 'SMS message cannot be configured when emailStyle is configured to CODE' ) ;
684
+ }
685
+ const emailMessage = props . userVerification ?. emailBody ?? 'Hello {username}, Verify your account by clicking on {##Verify Email##}' ;
686
+ if ( emailMessage . indexOf ( '{##Verify Email##}' ) < 0 ) {
687
+ throw new Error ( `Verification email body must contain the template string '{##Verify Email##}'` ) ;
688
+ }
689
+ return {
690
+ defaultEmailOption : VerificationEmailStyle . LINK ,
691
+ emailMessageByLink : emailMessage ,
692
+ emailSubjectByLink : emailSubject ,
693
+ smsMessage : props . userVerification ?. smsMessage ,
694
+ } ;
695
+ }
696
+ }
697
+
667
698
private signInConfiguration ( props : UserPoolProps ) {
668
699
let aliasAttrs : string [ ] | undefined ;
669
700
let usernameAttrs : string [ ] | undefined ;
0 commit comments