Erros no MSAL Angular

BrowserAuthErrors

Interação_em_curso

Mensagem de Erro: A interação está atualmente em andamento. Por favor, certifique-se de que esta interação foi concluída antes de chamar uma API interativa.

Este erro é lançado quando uma API interativa (loginPopup, loginRedirect, acquireTokenPopup, acquireTokenRedirect) é invocada enquanto outra API interativa ainda está em andamento. As APIs login e acquireToken são assíncronas, pelo que terá de garantir que as promessas resultantes tenham sido resolvidas antes de invocar outra API.

Existem @azure/msal-angular 2 cenários comuns em que isto pode acontecer:

  1. A sua aplicação não está a tratar corretamente os redirecionamentos. O erro ocorre então quando a aplicação ou o utilizador tentam chamar uma API interativa.
  2. A sua aplicação está a chamar uma das APIs acima sem verificar primeiro se a interação já está em curso noutro local.

Os redirecionamentos devem ser tratados com o MsalRedirectComponent ou chamando o handleRedirectObservable(). Não tratar explicitamente os redirecionamentos com qualquer uma destas duas abordagens resultará no erro acima. Consulte a nossa documentação sobre redirecionamentos aqui para mais informações sobre ambas as abordagens.

Além disso, qualquer interação deve ser efetuada após a subscrição do observável inProgress$ e a filtragem por InteractionStatus.None. Tentar interagir enquanto outro está em curso não é suportado e resultará no erro acima. Verificar InteractionStatus.None é a forma de garantir que isto não acontece. Por favor, consulte o nosso documento de eventos para mais detalhes.

Por favor, consulte o @azure/msal-browser documento de erro para mais informações sobre este erro.

❌ O exemplo seguinte irá gerar este erro quando outro componente já tiver invocado uma API interativa em andamento:

import { Component, OnInit } from '@angular/core';
import { MsalService, MsalBroadcastService, InteractionStatus } from '@azure/msal-angular';
import { filter } from 'rxjs/operators';

@Component()
export class ExampleComponent implements OnInit {

  constructor(
    private msalBroadcastService: MsalBroadcastService,
    private authService: MsalService
  ) {}

  ngOnInit(): void {
    this.authService.loginRedirect();
  }

✔️ Para corrigir o exemplo anterior, verifique se não há outra interação em curso antes de loginRedirectinvocar :

import { Component, OnInit } from '@angular/core';
import { InteractionStatus } from '@azure/msal-browser';
import { MsalService, MsalBroadcastService } from '@azure/msal-angular';
import { filter } from 'rxjs/operators';

@Component()
export class ExampleComponent implements OnInit {

  constructor(
    private msalBroadcastService: MsalBroadcastService,
    private authService: MsalService
  ) {}

  ngOnInit(): void {
    this.msalBroadcastService.inProgress$
      .pipe(
        filter((status: InteractionStatus) => status === InteractionStatus.None),
      )
      .subscribe(() => {
        this.authService.loginRedirect();
      })
  }

Passos de Resolução de Problemas

  • Ative o registo detalhado e trace a ordem dos eventos. Verifique se uma API interativa não é invocada antes de outra ter sido resolvida.
  • Se estiver a usar o fluxo de redirecionamento, certifique-se de que MsalRedirectComponet é inicializado corretamente ou de que handleRedirectObservable é chamado em todas as páginas para as quais possa haver redirecionamento.

Se não conseguir perceber porque é que este erro está a ser lançado, por favor abra uma consulta e esteja preparado para partilhar a seguinte informação:

  • Registos verbosos
  • Uma aplicação de exemplo e/ou excertos de código que possamos usar para reproduzir o problema
  • Atualize a página. O erro desaparece?
  • Abra a sua aplicação num novo separador. O erro desapareceu?