Fel i MSAL Angular

BrowserAuthErrors

Interaktion_pågår

Felmeddelande: Interaktion pågår för närvarande. Kontrollera att interaktionen har slutförts innan du anropar ett interaktivt API.

Det här felet utlöses när ett interaktivt API (loginPopup, , loginRedirectacquireTokenPopup, acquireTokenRedirect) anropas medan ett annat interaktivt API fortfarande pågår. Inloggnings- och acquireToken-API:erna är asynkrona, så du måste se till att de resulterande löftena har lösts innan du anropar en annan.

Det @azure/msal-angular finns två vanliga scenarier när detta kan inträffa:

  1. Programmet hanterar inte omdirigeringar korrekt. Felet uppstår sedan när appen eller användaren försöker anropa ett interaktivt API.
  2. Ditt program anropar något av ovanstående API:er utan att först kontrollera om interaktion redan pågår någon annanstans.

Omdirigeringar måste hanteras antingen med MsalRedirectComponent eller genom att anropa handleRedirectObservable(). Om du inte uttryckligen hanterar omdirigeringar med någon av dessa två metoder resulterar det i felet ovan. Mer information om båda metoderna finns i våra dokument om omdirigeringar här .

Dessutom bör all interaktion ske efter att du har prenumererat på inProgress$ observable och filtrerat på InteractionStatus.None. Försök till interaktion medan en annan pågår stöds inte och resulterar i felet ovan. Att söka efter InteractionStatus.None är så du ser till att detta inte sker. Mer information finns i vårt händelsedokument .

Mer information om det här felet finns i @azure/msal-browser feldokumentet .

❌ Följande exempel utlöser det här felet när en annan komponent redan har anropat ett interaktivt API som pågår:

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

✔️ Om du vill åtgärda föregående exempel kontrollerar du att ingen annan interaktion pågår innan du anropar loginRedirect:

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

Felsökningssteg

  • Aktivera utförlig loggning och spåra händelseordningen. Kontrollera att ett interaktivt API inte anropas innan ett annat har lösts.
  • Om du använder omdirigeringsflödet, se till att MsalRedirectComponet har initierats korrekt eller att handleRedirectObservable anropas på varje sida som kan omdirigeras.

Om du inte kan förstå varför det här felet uppstår ber vi dig att skapa ett ärende och vara beredd att dela följande information:

  • Utförliga loggar
  • En exempelapp och/eller kodfragment som vi kan använda för att återskapa problemet
  • Uppdatera sidan. Försvinner felet?
  • Öppna programmet på en ny flik. Försvinner felet?