Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Msal-Browser (@azure/msal-browser) начиная с версии 2.4 теперь предоставляет API событий, доступные пользователям основной библиотеки и библиотек оболочки. Эти события связаны с проверкой подлинности и действиями MSAL и могут использоваться в приложениях для обновления пользовательского интерфейса, отображения сообщений об ошибках и т. д.
Как выглядят события
export type EventMessage = {
eventType: EventType;
interactionType: InteractionType | null;
payload: EventPayload;
error: EventError;
timestamp: number;
};
Полезные данные и ошибки EventMessage определяются следующим образом:
export type EventPayload = PopupRequest | RedirectRequest | SilentRequest | SsoSilentRequest | EndSessionRequest | AuthenticationResult | PopupEvent | null;
export type EventError = AuthError | Error | null;
Как события создаются в msal-browser
Msal-browser имеет защищенную функцию emitEventи выдает события в основных API. Список текущих событий см. в таблице ниже.
Ниже приведен пример того, как msal-browser выдает событие с полезными данными или ошибкой:
this.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);
this.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);
Использование API событий
Msal-browser экспортирует addEventCallback функцию, которая принимает функцию обратного вызова и может использоваться для обработки создаваемых событий.
Ниже приведен пример использования создаваемых событий в приложении:
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
// Update UI or interact with EventMessage here
if (message.eventType === EventType.LOGIN_SUCCESS) {
console.log(message.payload);
}
});
При добавлении обратного вызова события возвращается идентификатор. Этот идентификатор можно использовать для удаления обратного вызова при необходимости с помощью removeEventCallback функции, экспортируемой msal-browser:
msalInstance.removeEventCallback(callbackId);
Обработка ошибок
В связи с определением способа EventError обработка ошибок, создаваемых событием, может потребовать проверки правильности ошибки перед доступом к определенным свойствам при возникновении ошибки. Ошибка может быть приведение или AuthError проверка того, что она является экземпляром AuthError.
Ниже приведен пример использования генерируемого события и приведения ошибки:
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
// Update UI or interact with EventMessage here
if (message.eventType === EventType.LOGIN_FAILURE) {
if (message.error instanceof AuthError) {
// Do something with the error
}
}
});
Получение состояния взаимодействия из событий
Текущее состояние взаимодействия можно получить из событий с помощью API getInteractionStatusFromEvent :
Ниже приведен пример отображения сообщения при отсутствии взаимодействия.
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
const status = EventMessageUtils.getInteractionStatusFromEvent(message);
// Update UI or interact with EventMessage here
if (status === InteractionStatus.None) {
console.log(message.payload);
}
});
Синхронизация вошедшего в систему состояния между вкладками и окнами
Если вы хотите обновить пользовательский интерфейс, когда пользователь входит в приложение или выходит из него или изменяет активную учетную запись на другой вкладке или окне, вы можете подписаться на LOGIN_SUCCESSсобытия LOGOUT_SUCCESSи ACTIVE_ACCOUNT_CHANGED события.
- При добавлении и удалении учетных записей полезные данные будут
AccountInfoобъектом, добавленным или удаленным. - Для активных обновлений учетной записи полезные данные не будут
msalInstance.addEventCallback((message: EventMessage) => {
if (message.eventType === EventType.LOGIN_SUCCESS) {
// Update UI with new account
} else if (message.eventType === EventType.LOGOUT_SUCCESS) {
// Update UI with account logged out
} else if (message.eventType === EventType.ACTIVE_ACCOUNT_CHANGED) {
const accountInfo = msalInstance.getActiveAccount();
// Update UI with new active account info
}
});
Таблица событий
Это события, которые в настоящее время создаются msal-browser.
| Тип события | Description | Тип взаимодействия | Полезная нагрузка | Error |
|---|---|---|---|---|
LOGIN_START |
LoginPopup или loginRedirect вызывается |
Popup или Redirect |
PopupRequest или RedirectRequest | |
LOGIN_SUCCESS |
Успешно вошедший в систему |
Popup или Redirect |
AccountInfo | |
LOGIN_FAILURE |
Ошибка при входе в систему |
Popup или Redirect |
AuthError или Error | |
ACQUIRE_TOKEN_START |
Метод AcquireTokenPopup или acquireTokenRedirect или acquireTokenSilent вызывается |
Popup или Redirect или Silent |
PopupRequest или RedirectRequest илиSilentRequest | |
ACQUIRE_TOKEN_SUCCESS |
Успешно полученный маркер из кэша или сети |
Popup или Redirect или Silent |
AuthenticationResult | |
ACQUIRE_TOKEN_FAILURE |
Ошибка при получении маркера |
Popup или Redirect или Silent |
AuthError или Error | |
ACQUIRE_TOKEN_NETWORK_START |
Начало получения маркера из сети | Silent |
||
SSO_SILENT_START |
Вызывается API SsoSilent | Silent |
SsoSilentRequest | |
SSO_SILENT_SUCCESS |
SsoSilent успешно выполнено | Silent |
AuthenticationResult | |
SSO_SILENT_FAILURE |
Сбой единого входа | Silent |
AuthError или Error | |
HANDLE_REDIRECT_START |
Вызов HandleRedirectPromise | Redirect |
||
HANDLE_REDIRECT_END |
Готово HandleRedirectPromise | Redirect |
||
LOGOUT_START |
Вызывается выход |
Redirect или Popup |
EndSessionRequest или EndSessionPopupRequest | |
LOGOUT_END |
Завершение выхода |
Redirect или Popup |
||
LOGOUT_SUCCESS |
Успешное завершение выхода |
Redirect или Popup |
EndSessionRequest или EndSessionPopupRequest | |
LOGOUT_FAILURE |
Сбой выхода |
Redirect или Popup |
AuthError или Error | |
ACTIVE_ACCOUNT_CHANGED |
Фильтры активных учетных записей, измененные на другой вкладке или окне | N/A | N/A | N/A |
INITIALIZE_START |
Инициализация функции с именем | N/A | N/A | N/A |
INITIALIZE_END |
Инициализация функции завершена | N/A | N/A | N/A |