From 59df0404ae1540139a4a693262f06432385f0005 Mon Sep 17 00:00:00 2001 From: Kang Ming Date: Thu, 12 Dec 2024 15:41:29 +0800 Subject: [PATCH 1/2] fix: return error early for redirects --- src/GoTrueClient.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/GoTrueClient.ts b/src/GoTrueClient.ts index b01b16e0..99c40519 100644 --- a/src/GoTrueClient.ts +++ b/src/GoTrueClient.ts @@ -1423,14 +1423,24 @@ export default class GoTrueClient { > { try { if (!isBrowser()) throw new AuthImplicitGrantRedirectError('No browser detected.') + + const params = parseParametersFromURL(window.location.href) + if (params.error || params.error_description || params.error_code) { + throw new AuthImplicitGrantRedirectError( + params.error_description || 'Error in URL with unspecified error_description', + { + error: params.error || 'unspecified_error', + code: params.error_code || 'unspecified_code', + } + ) + } + if (this.flowType === 'implicit' && !this._isImplicitGrantFlow()) { throw new AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.') } else if (this.flowType == 'pkce' && !isPKCEFlow) { throw new AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.') } - const params = parseParametersFromURL(window.location.href) - if (isPKCEFlow) { if (!params.code) throw new AuthPKCEGrantCodeExchangeError('No code detected.') const { data, error } = await this._exchangeCodeForSession(params.code) @@ -1444,16 +1454,6 @@ export default class GoTrueClient { return { data: { session: data.session, redirectType: null }, error: null } } - if (params.error || params.error_description || params.error_code) { - throw new AuthImplicitGrantRedirectError( - params.error_description || 'Error in URL with unspecified error_description', - { - error: params.error || 'unspecified_error', - code: params.error_code || 'unspecified_code', - } - ) - } - const { provider_token, provider_refresh_token, From 039727d2660098f5a80d8ddec6e5b6576de75ed1 Mon Sep 17 00:00:00 2001 From: Kang Ming Date: Thu, 12 Dec 2024 16:18:25 +0800 Subject: [PATCH 2/2] chore: add comments --- src/GoTrueClient.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/GoTrueClient.ts b/src/GoTrueClient.ts index 99c40519..2faf0f12 100644 --- a/src/GoTrueClient.ts +++ b/src/GoTrueClient.ts @@ -1425,7 +1425,11 @@ export default class GoTrueClient { if (!isBrowser()) throw new AuthImplicitGrantRedirectError('No browser detected.') const params = parseParametersFromURL(window.location.href) + + // If there's an error in the URL, it doesn't matter what flow it is, we just return the error. if (params.error || params.error_description || params.error_code) { + // The error class returned implies that the redirect is from an implicit grant flow + // but it could also be from a redirect error from a PKCE flow. throw new AuthImplicitGrantRedirectError( params.error_description || 'Error in URL with unspecified error_description', { @@ -1435,6 +1439,7 @@ export default class GoTrueClient { ) } + // Checks for mismatches between the flowType initialised in the client and the URL parameters if (this.flowType === 'implicit' && !this._isImplicitGrantFlow()) { throw new AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.') } else if (this.flowType == 'pkce' && !isPKCEFlow) {