diff --git a/__tests__/index.test.ts b/__tests__/index.test.ts index 66855f198..ab6b3c2e5 100644 --- a/__tests__/index.test.ts +++ b/__tests__/index.test.ts @@ -516,6 +516,17 @@ describe('Auth0', () => { `https://test.auth0.com/authorize?query=params${TEST_TELEMETRY_QUERY_STRING}` ); }); + it('calls `window.location.assign` with the correct url and fragment if provided', async () => { + const { auth0 } = await setup(); + + await auth0.loginWithRedirect({ + ...REDIRECT_OPTIONS, + fragment: '/reset' + }); + expect(window.location.assign).toHaveBeenCalledWith( + `https://test.auth0.com/authorize?query=params${TEST_TELEMETRY_QUERY_STRING}#/reset` + ); + }); it('can be called with no arguments', async () => { const { auth0 } = await setup(); diff --git a/src/Auth0Client.ts b/src/Auth0Client.ts index bd93bcc36..485d37ad6 100644 --- a/src/Auth0Client.ts +++ b/src/Auth0Client.ts @@ -228,6 +228,7 @@ export default class Auth0Client { const code_verifier = createRandomString(); const code_challengeBuffer = await sha256(code_verifier); const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer); + const fragment = options.fragment ? `#${options.fragment}` : ''; const params = this._getParams( authorizeOptions, stateIn, @@ -243,7 +244,7 @@ export default class Auth0Client { scope: params.scope, audience: params.audience || 'default' }); - return url; + window.location.assign(url + fragment); } /** diff --git a/src/global.ts b/src/global.ts index 6010540ad..568615b7e 100644 --- a/src/global.ts +++ b/src/global.ts @@ -86,7 +86,7 @@ interface Auth0ClientOptions extends BaseLoginOptions { redirect_uri?: string; /** * The value in seconds used to account for clock skew in JWT expirations. - * Typically, this value is no more than a minute or two at maximum. + * Typically, this value is no more than a minute or two at maximum. * Defaults to 60s. */ leeway?: number; @@ -118,6 +118,10 @@ interface LoginUrlOptions extends BaseLoginOptions { * Used to store state before doing the redirect */ appState?: any; + /** + * Used to add to the URL fragment before redirecting + */ + fragment?: string; } interface RedirectLoginResult {