Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
BrowserAuthErrors
Interaction_in_progress
Сообщение об ошибке: взаимодействие в настоящее время выполняется. Перед вызовом интерактивного API убедитесь, что это взаимодействие завершено.
Эта ошибка возникает при вызове интерактивного API (loginPopup, loginRedirect, acquireTokenPopup, ) acquireTokenRedirectво время выполнения другого интерактивного API. Интерфейсы API для входа и полученияToken являются асинхронными, поэтому необходимо убедиться, что полученные обещания разрешены перед вызовом другого.
В @azure/msal-angular есть 2 распространенных сценария, когда это может произойти:
- Приложение не обрабатывает перенаправления правильно. Эта ошибка возникает, когда приложение или пользователь пытается вызвать интерактивный API.
- Приложение вызывает один из приведенных выше API, не проверяя, выполняется ли взаимодействие в другом месте.
Перенаправления должны обрабатываться либо с помощью MsalRedirectComponent, либо вызовом handleRedirectObservable(). Если явно не обрабатывать перенаправления ни одним из этих двух способов, возникнет ошибка, указанная выше. Дополнительные сведения об обоих подходах см. в наших документах по перенаправлениям.
Кроме того, любые действия следует выполнять после подписки на наблюдаемый объект inProgress$ и фильтрации по InteractionStatus.None. Попытка взаимодействия, пока выполняется другое взаимодействие, не поддерживается и приведет к указанной выше ошибке. Проверка InteractionStatus.None позволяет убедиться, что этого не произойдет. Дополнительные сведения см. в документации по событиям .
Дополнительные сведения об этой ошибке см. в документации по ошибке@azure/msal-browser.
❌ В следующем примере эта ошибка возникает, когда другой компонент уже вызвал интерактивный API, выполняющийся:
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();
}
✔️ Чтобы исправить предыдущий пример, проверьте, не выполняется ли другое взаимодействие перед вызовом 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();
})
}
Шаги по устранению неполадок
- Включите подробное ведение журнала и трассировку порядка событий. Убедитесь, что интерактивный API не вызывается до завершения работы другого интерактивного API.
- Если вы используете сценарий перенаправления, убедитесь, что
MsalRedirectComponetкорректно инициализирован или чтоhandleRedirectObservableвызывается на каждой странице, на которую может произойти перенаправление.
Если вы не можете выяснить, почему эта ошибка возникает, откройте проблему и подготовитесь к отправке следующих сведений:
- Подробные логи
- Пример приложения и/или фрагменты кода, которые можно использовать для воспроизведения проблемы
- Обновите страницу. Ошибка исчезает?
- Откройте приложение в новой вкладке. Ошибка исчезла?