Skip to content

Commit 7a8566e

Browse files
authored
fix: use username if present as Username parameter for signup (#6766)
1 parent 52c8c24 commit 7a8566e

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

.changeset/tiny-hounds-start.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@aws-amplify/ui': minor
3+
---
4+
5+
fix: use username if present as Username parameter for signup

packages/ui/src/machines/authenticator/__tests__/utils.test.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,43 @@ describe('getUsernameSignUp', () => {
8383
const expected = '+268002428976';
8484
expect(output).toEqual(expected);
8585
});
86+
87+
it('returns sanitized phone when only phone_number is a login mechanism (phone as username mode)', () => {
88+
const formValues = {
89+
phone_number: '8002428976',
90+
country_code: '+1',
91+
password: 'P@ssw0rd',
92+
confirm_password: 'P@ssw0rd',
93+
};
94+
95+
const output = getUsernameSignUp({
96+
formValues,
97+
loginMechanisms: ['phone_number'] as LoginMechanism[],
98+
} as unknown as AuthActorContext);
99+
100+
// When phone_number is the only mechanism (not alias mode), use it as username
101+
expect(output).toEqual('+18002428976');
102+
});
103+
104+
it('returns username when username, email, and phone_number are all login mechanisms regardless order', () => {
105+
const formValues = {
106+
username: 'testuser',
107+
108+
phone_number: '8002428976',
109+
country_code: '+1',
110+
password: 'P@ssw0rd',
111+
confirm_password: 'P@ssw0rd',
112+
};
113+
114+
const output = getUsernameSignUp({
115+
formValues,
116+
loginMechanisms: [
117+
'email',
118+
'username',
119+
'phone_number',
120+
] as LoginMechanism[],
121+
} as unknown as AuthActorContext);
122+
123+
expect(output).toEqual('testuser');
124+
});
86125
});

packages/ui/src/machines/authenticator/utils.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,20 @@ export const getUsernameSignUp = ({
8686
formValues,
8787
loginMechanisms,
8888
}: AuthActorContext) => {
89+
// When 'username' is in loginMechanisms, always use the username field for the Username parameter.
90+
// This handles both username-only mode and alias mode (username + email/phone as sign-in options).
91+
// See: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases
92+
if (loginMechanisms.includes('username')) {
93+
return formValues.username;
94+
}
95+
8996
const loginMechanism = loginMechanisms[0];
9097

9198
if (loginMechanism === 'phone_number') {
9299
const { country_code, phone_number } = formValues;
93100
return sanitizePhoneNumber(country_code, phone_number);
94101
}
95102

103+
// Otherwise, use the primary login mechanism (email as username)
96104
return formValues[loginMechanism];
97105
};

0 commit comments

Comments
 (0)