Fehler in MSAL Angular

BrowserAuthErrors

Interaction_in_progress

Fehlermeldung: Interaktion ist derzeit im Gange. Stellen Sie sicher, dass diese Interaktion abgeschlossen wurde, bevor Sie eine interaktive API aufrufen.

Dieser Fehler wird ausgelöst, wenn eine interaktive API (loginPopup, loginRedirect, acquireTokenPopup, acquireTokenRedirect) aufgerufen wird, während eine andere interaktive API noch ausgeführt wird. Die Anmelde- und AcquireToken-APIs sind asynchron, sodass Sie sicherstellen müssen, dass die resultierenden Zusagen aufgelöst wurden, bevor Sie eine andere aufrufen.

In @azure/msal-angular gibt es zwei häufige Szenarien, in denen dies geschehen kann:

  1. Ihre Anwendung behandelt Umleitungen nicht richtig. Der Fehler tritt dann auf, wenn die App oder der Benutzer versucht, eine interaktive API aufzurufen.
  2. Ihre Anwendung ruft eine der oben genannten APIs auf, ohne zuerst zu überprüfen, ob die Interaktion bereits an anderer Stelle ausgeführt wird.

Umleitungen müssen entweder mit dem MsalRedirectComponent oder mit dem Aufruf von handleRedirectObservable() behandelt werden. Wenn Umleitungen mit einem dieser beiden Ansätze nicht explizit behandelt werden, führt dies zu dem oben genannten Fehler. Weitere Informationen zu beiden Ansätzen finden Sie in unseren Dokumenten zu Umleitungen.

Darüber hinaus sollte jede Interaktion erst nach dem Abonnieren des inProgress$ Observable und dem Filtern nach InteractionStatus.None erfolgen. Der Versuch einer Interaktion, während eine andere in Bearbeitung ist, wird nicht unterstützt und führt zu dem obigen Fehler. Die Überprüfung auf InteractionStatus.None stellt sicher, dass dies nicht geschieht. Weitere Informationen finden Sie in unserem Veranstaltungsdokument .

Weitere Informationen zu diesem Fehler finden Sie im @azure/msal-browser Fehlerdokument .

❌ Im folgenden Beispiel wird dieser Fehler ausgelöst, wenn eine andere Komponente bereits eine interaktive API aufgerufen hat, die ausgeführt wird:

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();
  }

✔️ Um das vorherige Beispiel zu beheben, überprüfen Sie, ob vor dem Aufrufen loginRedirectkeine andere Interaktion ausgeführt wird:

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();
      })
  }

Schritte zur Problembehandlung

  • Aktivieren Sie die detaillierte Protokollierung und verfolgen Sie die Reihenfolge der Ereignisse. Stellen Sie sicher, dass eine interaktive API nicht aufgerufen wird, bevor eine andere aufgelöst wurde.
  • Wenn Sie den Redirect-Flow verwenden, stellen Sie sicher, dass MsalRedirectComponet korrekt initialisiert ist oder dass handleRedirectObservable auf jeder Seite aufgerufen wird, auf die möglicherweise weitergeleitet wird.

Wenn Sie nicht herausfinden können, warum dieser Fehler ausgelöst wird, öffnen Sie ein Problem , und seien Sie bereit, die folgenden Informationen freizugeben:

  • Ausführliche Protokolle
  • Beispiel-App und/oder Codeausschnitte, mit denen wir das Problem reproduzieren können
  • Aktualisieren Sie die Seite. Ist der Fehler nicht mehr aufgetreten?
  • Öffnen Sie Ihre Anwendung auf einer neuen Registerkarte. Ist der Fehler nicht mehr aufgetreten?