diff --git a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts index 6e5e8dd049..87f2e3814f 100644 --- a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts +++ b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts @@ -24,7 +24,8 @@ import { InteractionRequiredAuthError, SsoSilentRequest, EventMessage, - AuthenticationResult + AuthenticationResult, + BrowserAuthError } from '@azure/msal-browser'; import { AuthenticationProviderOptions } from '@microsoft/microsoft-graph-client'; @@ -476,8 +477,24 @@ export class Msal2Provider extends IProvider { domainHint: this._domainHint }; if (this._loginType === LoginType.Popup) { - const response = await this._publicClientApplication.loginPopup(loginRequest); - this.handleResponse(response?.account); + try { + const response = await this._publicClientApplication.loginPopup(loginRequest); + this.handleResponse(response?.account); + } catch (error) { + switch (true) { + case error instanceof BrowserAuthError && error.errorCode === 'user_cancelled': + console.warn('🦒: User cancelled the login flow.'); + this.setState(ProviderState.SignedOut); + break; + case error instanceof BrowserAuthError && error.errorCode === 'interaction_in_progress': + console.warn('🦒: Login already in progess. Close the popup to login again.'); + this.setState(ProviderState.SignedOut); + break; + default: + console.error('🦒: Error occurred during login:', error); + throw error; + } + } } else { const loginRedirectRequest: RedirectRequest = { ...loginRequest }; await this._publicClientApplication.loginRedirect(loginRedirectRequest);