Hibák az MSAL Angularban

BrowserAuthErrors

Interakció_folyamatban

Hibaüzenet: Az interakció jelenleg folyamatban van. Az interaktív API meghívása előtt győződjön meg arról, hogy ez az interakció befejeződött.

Ez a hiba akkor jelentkezik, ha egy interaktív API (loginPopup, loginRedirect, , acquireTokenPopupacquireTokenRedirect) meghívása közben egy másik interaktív API is folyamatban van. A bejelentkezési és a acquireToken API-k aszinkronok, ezért gondoskodnia kell arról, hogy az eredményül kapott ígéretek feloldódjanak egy másik meghívás előtt.

Ez @azure/msal-angular két gyakori forgatókönyv esetén fordulhat elő:

  1. Az alkalmazás nem megfelelően kezeli az átirányításokat. A hiba akkor fordul elő, ha az alkalmazás vagy a felhasználó interaktív API-t próbál meghívni.
  2. Az alkalmazás a fenti API-k egyikét hívja meg anélkül, hogy először ellenőrizned kell, hogy máshol már folyamatban van-e az interakció.

Az átirányításokat vagy a MsalRedirectComponent használatával, vagy a handleRedirectObservable() meghívásával kell kezelni. Ha nem kezeli explicit módon az átirányításokat e két módszer valamelyikével, akkor a fenti hiba jelenik meg. A két megközelítéssel kapcsolatos további információkért tekintse meg az átirányításokról szóló dokumentációnkat.

Emellett minden interakciót a inProgress$ observable-re való feliratkozás és a(z) InteractionStatus.None szerinti szűrés után kell végrehajtani. Egy interakció megkísérlése, miközben egy másik már folyamatban van, nem támogatott, és a fenti hibát eredményezi. A(z) InteractionStatus.None ellenőrzésével biztosíthatja, hogy ez ne történjen meg. További részletekért tekintse meg az eseményekkel kapcsolatos dokumentumunkat .

A hibával kapcsolatos további információkért tekintse meg a @azure/msal-browser hiba dokumentumát .

❌ Az alábbi példa akkor jelenik meg, ha egy másik összetevő már meghívott egy folyamatban lévő interaktív API-t:

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

✔️ Az előző példa kijavításához ellenőrizze, hogy nincs-e folyamatban más interakció a meghívás loginRedirectelőtt:

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

Hibaelhárítási lépések

  • Részletes naplózás engedélyezése és az események sorrendjének nyomon követése. Ellenőrizze, hogy ne hívják meg az interaktív API-t, mielőtt egy másik befejeződik.
  • Ha az átirányítási folyamatot használja, győződjön meg arról, hogy MsalRedirectComponet megfelelően van elindítva, vagy handleRedirectObservable minden olyan oldalon meghívja, amelyre átirányítható.

Ha nem tudja kitalálni, hogy miért jelenik meg ez a hiba, nyisson meg egy problémát , és készüljön fel a következő információk megosztására:

  • Részletes naplók
  • Mintaalkalmazás és/vagy kódrészletek, amelyekkel reprodukálhatjuk a problémát
  • Frissítse az oldalt. Eltűnik a hiba?
  • Nyissa meg az alkalmazást egy új lapon. Eltűnik a hiba?