Skip to content

Commit

Permalink
feat<Auth>: Allow sending login_hint, lang and nonce on signInWithRed…
Browse files Browse the repository at this point in the history
…irects (aws-amplify#8951)
  • Loading branch information
Alevale committed Dec 18, 2024
1 parent ec2ff53 commit aea008c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ describe('signInWithRedirect', () => {
);
expect(mockHandleFailure).toHaveBeenCalledWith(expectedError);
});

it('should not set the Oauth flag on non-browser environments', async () => {
const mockOpenAuthSessionResult = {
type: 'success',
Expand All @@ -295,6 +296,28 @@ describe('signInWithRedirect', () => {

expect(oAuthStore.storeOAuthInFlight).toHaveBeenCalledTimes(0);
});

it('should send the login_hint, lang and nonce in the query string if provided', async () => {
await signInWithRedirect({
provider: 'Google',
options: {
loginHint: 'someone@gmail.com',
lang: 'en',
nonce: '88388838883',
},
});

const [oauthUrl, redirectSignIn, preferPrivateSession] =
mockOpenAuthSession.mock.calls[0];

expect(oauthUrl).toStrictEqual(
'https://oauth.domain.com/oauth2/authorize?redirect_uri=http%3A%2F%2Flocalhost%3A3000%2F&response_type=code&client_id=userPoolClientId&identity_provider=Google&scope=phone%20email%20openid%20profile%20aws.cognito.signin.user.admin&login_hint=someone%40gmail.com&lang=en&nonce=88388838883&state=oauth_state&code_challenge=code_challenge&code_challenge_method=S256',
);
expect(redirectSignIn).toEqual(
mockAuthConfigWithOAuth.Auth.Cognito.loginWith.oauth.redirectSignIn,
);
expect(preferPrivateSession).toBeUndefined();
});
});

describe('errors', () => {
Expand Down
13 changes: 13 additions & 0 deletions packages/auth/src/providers/cognito/apis/signInWithRedirect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ export async function signInWithRedirect(
provider,
customState: input?.customState,
preferPrivateSession: input?.options?.preferPrivateSession,
loginHint: input?.options?.loginHint,
lang: input?.options?.lang,
nonce: input?.options?.nonce,
});
}

Expand All @@ -66,12 +69,18 @@ const oauthSignIn = async ({
clientId,
customState,
preferPrivateSession,
loginHint,
lang,
nonce,
}: {
oauthConfig: OAuthConfig;
provider: string;
clientId: string;
customState?: string;
preferPrivateSession?: boolean;
loginHint?: string;
lang?: string;
nonce?: string;
}) => {
const { domain, redirectSignIn, responseType, scopes } = oauthConfig;
const randomState = generateState();
Expand Down Expand Up @@ -99,6 +108,10 @@ const oauthSignIn = async ({
client_id: clientId,
identity_provider: provider,
scope: scopes.join(' '),
// eslint-disable-next-line camelcase
...(loginHint && { login_hint: loginHint }),
...(lang && { lang }),
...(nonce && { nonce }),
state,
...(responseType === 'code' && {
code_challenge: toCodeChallenge(),
Expand Down
3 changes: 3 additions & 0 deletions packages/auth/src/types/inputs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ export interface AuthSignInWithRedirectInput {
* On all other platforms, this flag is ignored.
*/
preferPrivateSession?: boolean;
loginHint?: string;
lang?: string;
nonce?: string;
};
}

Expand Down

0 comments on commit aea008c

Please sign in to comment.