Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
BrowserAuthErrors
Interakcja_w_toku
Komunikat o błędzie: Interakcja jest obecnie w toku. Przed wywołaniem interaktywnego interfejsu API upewnij się, że ta interakcja została ukończona.
Ten błąd jest zgłaszany, gdy interakcyjny interfejs API (loginPopup, loginRedirect, acquireTokenPopup, acquireTokenRedirect) jest wywoływany, gdy inny interaktywny interfejs API jest nadal w toku. Interfejsy API login i acquireToken są asynchroniczne, dlatego przed wywołaniem kolejnego należy upewnić się, że powiązane z nimi obietnice zostały zrealizowane.
W @azure/msal-angular istnieją 2 typowe scenariusze, w których może się to zdarzyć:
- Aplikacja nie obsługuje prawidłowo przekierowań. Błąd występuje wtedy, gdy aplikacja lub użytkownik próbuje wywołać interaktywny interfejs API.
- Aplikacja wywołuje jeden z powyższych interfejsów API bez uprzedniego sprawdzenia, czy interakcja jest już w toku w innym miejscu.
Przekierowania muszą być obsługiwane za pomocą MsalRedirectComponent albo przez wywołanie handleRedirectObservable(). Nieobsługiwowanie przekierowań jawnie przy użyciu jednego z tych dwóch podejść spowoduje błąd powyżej. Aby uzyskać więcej informacji na temat obu podejść, zobacz nasze dokumenty dotyczące przekierowań.
Ponadto wszelkie działania należy wykonywać po zasubskrybowaniu observable inProgress$ i odfiltrowaniu pod kątem InteractionStatus.None. Próba interakcji, gdy inna jest w toku, nie jest obsługiwana i spowoduje błąd powyżej. Sprawdzanie, czy występuje InteractionStatus.None, pozwala upewnić się, że do tego nie dojdzie. Aby uzyskać więcej informacji, zobacz nasz dokument zdarzeń .
Aby uzyskać więcej informacji na temat tego błędu, zobacz @azure/msal-browser dokument o błędzie .
❌ W poniższym przykładzie ten błąd zostanie zgłoszony, gdy inny składnik wywołał już interakcyjny interfejs API, który jest w toku:
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();
}
✔️ Aby poprawić poprzedni przykład, przed wywołaniem loginRedirect sprawdź, czy nie trwa żadna inna interakcja:
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();
})
}
Kroki rozwiązywania problemów
- Włącz szczegółowe rejestrowanie i śledź kolejność zdarzeń. Sprawdź, czy interaktywny interfejs API nie jest wywoływany, zanim inny interfejs API zakończy działanie.
- Jeśli używasz przepływu przekierowania, upewnij się, że
MsalRedirectComponetjest poprawnie uruchamiany lubhandleRedirectObservablejest wywoływany na każdej stronie, do której można przekierować.
Jeśli nie możesz dowiedzieć się, dlaczego ten błąd jest zgłaszany, otwórz problem i przygotuj się do udostępnienia następujących informacji:
- Pełne dzienniki
- Przykładowa aplikacja i/lub fragmenty kodu, których możemy użyć do odtworzenia problemu
- Odśwież stronę. Czy błąd zniknie?
- Otwórz aplikację na nowej karcie. Czy błąd zniknie?