From 697b84f3eb15367d100c01836a51abfa2ec78bce Mon Sep 17 00:00:00 2001 From: wangsijie Date: Thu, 10 Nov 2022 15:45:21 +0800 Subject: [PATCH] fix(core): sign in method requires at least one factor (#2384) --- .../lib/sign-in-experience/sign-in.test.ts | 35 +++++++++++++++++++ .../src/lib/sign-in-experience/sign-in.ts | 7 ++++ packages/phrases/src/locales/de/errors.ts | 1 + packages/phrases/src/locales/en/errors.ts | 1 + packages/phrases/src/locales/fr/errors.ts | 1 + packages/phrases/src/locales/ko/errors.ts | 1 + packages/phrases/src/locales/pt-pt/errors.ts | 1 + packages/phrases/src/locales/tr-tr/errors.ts | 1 + packages/phrases/src/locales/zh-cn/errors.ts | 1 + 9 files changed, 49 insertions(+) diff --git a/packages/core/src/lib/sign-in-experience/sign-in.test.ts b/packages/core/src/lib/sign-in-experience/sign-in.test.ts index 578328ae3..6fa91787c 100644 --- a/packages/core/src/lib/sign-in-experience/sign-in.test.ts +++ b/packages/core/src/lib/sign-in-experience/sign-in.test.ts @@ -218,6 +218,7 @@ describe('validate sign-in', () => { ...mockSignInMethod, identifier: SignInIdentifier.Email, password: false, + verificationCode: true, }, ], }, @@ -261,4 +262,38 @@ describe('validate sign-in', () => { }) ); }); + + it('throws when verification code and password are both disabled', () => { + expect(() => { + validateSignIn( + { + methods: [ + { + ...mockSignInMethod, + identifier: SignInIdentifier.Email, + verificationCode: false, + password: false, + }, + { + ...mockSignInMethod, + identifier: SignInIdentifier.Sms, + verificationCode: true, + password: false, + }, + ], + }, + { + ...mockSignUp, + identifier: SignUpIdentifier.Sms, + password: false, + verify: true, + }, + enabledConnectors + ); + }).toMatchError( + new RequestError({ + code: 'sign_in_experiences.at_least_one_authentication_factor', + }) + ); + }); }); diff --git a/packages/core/src/lib/sign-in-experience/sign-in.ts b/packages/core/src/lib/sign-in-experience/sign-in.ts index 774d06386..6beef006e 100644 --- a/packages/core/src/lib/sign-in-experience/sign-in.ts +++ b/packages/core/src/lib/sign-in-experience/sign-in.ts @@ -31,6 +31,13 @@ export const validateSignIn = ( ); } + assertThat( + signIn.methods.every(({ password, verificationCode }) => password || verificationCode), + new RequestError({ + code: 'sign_in_experiences.at_least_one_authentication_factor', + }) + ); + switch (signUp.identifier) { case SignUpIdentifier.Username: { assertThat( diff --git a/packages/phrases/src/locales/de/errors.ts b/packages/phrases/src/locales/de/errors.ts index a7ca06dde..b4ec433f6 100644 --- a/packages/phrases/src/locales/de/errors.ts +++ b/packages/phrases/src/locales/de/errors.ts @@ -128,6 +128,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: 'Die Sprache - {{language}} wird momentan nicht unterstützt.', + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', // UNTRANSLATED }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/en/errors.ts b/packages/phrases/src/locales/en/errors.ts index 92b680018..b68195e1d 100644 --- a/packages/phrases/src/locales/en/errors.ts +++ b/packages/phrases/src/locales/en/errors.ts @@ -126,6 +126,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', unsupported_default_language: 'This language - {{language}} is not supported at the moment.', + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/fr/errors.ts b/packages/phrases/src/locales/fr/errors.ts index b07dcebd1..21047a496 100644 --- a/packages/phrases/src/locales/fr/errors.ts +++ b/packages/phrases/src/locales/fr/errors.ts @@ -134,6 +134,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: 'This language - {{language}} is not supported at the moment.', // UNTRANSLATED + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', // UNTRANSLATED }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/ko/errors.ts b/packages/phrases/src/locales/ko/errors.ts index ece6cf131..072458cee 100644 --- a/packages/phrases/src/locales/ko/errors.ts +++ b/packages/phrases/src/locales/ko/errors.ts @@ -123,6 +123,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: 'This language - {{language}} is not supported at the moment.', // UNTRANSLATED + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', // UNTRANSLATED }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/pt-pt/errors.ts b/packages/phrases/src/locales/pt-pt/errors.ts index a7533a5b0..1d9616ddc 100644 --- a/packages/phrases/src/locales/pt-pt/errors.ts +++ b/packages/phrases/src/locales/pt-pt/errors.ts @@ -129,6 +129,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: 'This language - {{language}} is not supported at the moment.', // UNTRANSLATED + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', // UNTRANSLATED }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/tr-tr/errors.ts b/packages/phrases/src/locales/tr-tr/errors.ts index 031a51588..74fcbee11 100644 --- a/packages/phrases/src/locales/tr-tr/errors.ts +++ b/packages/phrases/src/locales/tr-tr/errors.ts @@ -127,6 +127,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: 'This language - {{language}} is not supported at the moment.', // UNTRANSLATED + at_least_one_authentication_factor: 'You have to select at least one authentication factor.', // UNTRANSLATED }, localization: { cannot_delete_default_language: diff --git a/packages/phrases/src/locales/zh-cn/errors.ts b/packages/phrases/src/locales/zh-cn/errors.ts index 1ecd5a014..99e18e8bd 100644 --- a/packages/phrases/src/locales/zh-cn/errors.ts +++ b/packages/phrases/src/locales/zh-cn/errors.ts @@ -119,6 +119,7 @@ const errors = { code_sign_in_must_be_enabled: 'Verification code sign in must be enabled when set a password is not required in sign up.', // UNTRANSLATED unsupported_default_language: '{{language}}无法选择为默认语言。', + at_least_one_authentication_factor: '至少要选择一个登录要素', }, localization: { cannot_delete_default_language: '你已设置{{languageTag}}为你的默认语言,你无法删除默认语言。',