Chyby v MSAL Angular

BrowserAuthErrors

Interakce_probíhá

Chybová zpráva: Probíhá interakce. Před voláním interaktivního rozhraní API se ujistěte, že byla tato interakce dokončena.

Tato chyba se vyvolá, když se vyvolá interaktivní rozhraní API (loginPopup, loginRedirectacquireTokenPopup, ), acquireTokenRedirectzatímco probíhá jiné interaktivní rozhraní API. Rozhraní API pro přihlášení a získáníTokenu jsou asynchronní, takže budete muset zajistit, aby se výsledné přísliby vyřešily před vyvoláním jiného.

Existují @azure/msal-angular 2 běžné scénáře, kdy k tomu může dojít:

  1. Vaše aplikace nezpracovává správně přesměrování. K chybě pak dojde, když se aplikace nebo uživatel pokusí volat interaktivní rozhraní API.
  2. Vaše aplikace volá jedno z výše uvedených rozhraní API bez první kontroly, jestli už probíhá interakce jinde.

Přesměrování musí být zpracována buď pomocí MsalRedirectComponent, nebo voláním handleRedirectObservable(). Nezpracovávání přesměrování explicitně s některým z těchto dvou přístupů způsobí chybu uvedenou výše. Více informací o obou přístupech najdete zde v naší dokumentaci o přesměrování.

Kromě toho by veškeré interakce měly probíhat až po přihlášení k observable inProgress$ a po vyfiltrování InteractionStatus.None. Pokus o interakci, zatímco probíhá jiná operace, není podporován a výsledkem bude výše uvedená chyba. Kontrolou InteractionStatus.None zajistíte, že k tomu nedojde. Další podrobnosti najdete v naší dokumentaci k událostem .

Další informace o této chybě najdete v @azure/msal-browser dokumentaci k chybě .

❌ Následující příklad vyvolá tuto chybu, pokud již jiná komponenta vyvolala interaktivní rozhraní API, které probíhá:

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

✔️ Pokud chcete předchozí příklad opravit, před vyvoláním loginRedirectzkontrolujte, jestli neprobíhá žádná jiná interakce:

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

Postup při řešení problémů

  • Povolte podrobné protokolování a sledujte pořadí událostí. Ověřte, že interaktivní rozhraní API není voláno dříve, než se dokončí jiné volání rozhraní API.
  • Pokud používáte postup přesměrování, ujistěte se, že MsalRedirectComponet je správně inicializován nebo že se handleRedirectObservable volá na každé stránce, na kterou může být uživatel přesměrován.

Pokud nemůžete zjistit, proč k této chybě dochází, otevřete problém a připravte se na sdílení následujících informací:

  • Podrobné protokoly
  • Ukázková aplikace nebo fragmenty kódu, které můžeme použít k reprodukci problému
  • Aktualizujte stránku. Zmizí chyba?
  • Otevřete aplikaci v nové kartě. Zmizí chyba?