Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Msal-Browser (@azure/msal-browser) a partir de la versión 2.4 ahora proporciona API de eventos que están disponibles para los usuarios de nuestra biblioteca principal y bibliotecas contenedoras. Estos eventos están relacionados con la autenticación y lo que MSAL está haciendo y se pueden usar en aplicaciones para actualizar la interfaz de usuario, mostrar mensajes de error, etc.
Aspecto de los eventos
export type EventMessage = {
eventType: EventType;
interactionType: InteractionType | null;
payload: EventPayload;
error: EventError;
timestamp: number;
};
La carga y el error de EventMessage se definen de la siguiente manera:
export type EventPayload = PopupRequest | RedirectRequest | SilentRequest | SsoSilentRequest | EndSessionRequest | AuthenticationResult | PopupEvent | null;
export type EventError = AuthError | Error | null;
Cómo se emiten los eventos en msal-browser
Msal-browser tiene una función emitEventprotegida y emite eventos en las API principales. Para obtener la lista de eventos emitidos actualmente, consulte la tabla siguiente.
Este es un ejemplo de cómo msal-browser emite un evento con una carga o con un error:
this.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);
this.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);
Uso de la API de eventos
Msal-browser exporta la addEventCallback función que toma una función de devolución de llamada y se puede usar para procesar eventos emitidos.
Este es un ejemplo de cómo podría consumir los eventos emitidos en la aplicación:
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
// Update UI or interact with EventMessage here
if (message.eventType === EventType.LOGIN_SUCCESS) {
console.log(message.payload);
}
});
Al agregar una devolución de llamada de evento, se devolverá un identificador. Este identificador se puede usar para quitar la devolución de llamada si es necesario, mediante la removeEventCallback función exportada por msal-browser:
msalInstance.removeEventCallback(callbackId);
Control de errores
Debido a la forma EventError en que se define, el control de errores emitidos con un evento puede requerir la validación de que el error es del tipo correcto antes de acceder a propiedades específicas en el error emitido. El error se puede convertir AuthError o comprobar que es una instancia de AuthError.
Este es un ejemplo de consumo de un evento emitido y la conversión del error:
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
}
}
});
Obtención del estado de interacción de los eventos
Puede obtener el estado de interacción actual de los eventos mediante la API getInteractionStatusFromEvent :
Este es un ejemplo de visualización de un mensaje cuando no hay interacciones en curso:
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);
}
});
Sincronización del estado iniciado sesión entre pestañas y ventanas
Si quiere actualizar la interfaz de usuario cuando un usuario inicia sesión o sale de la aplicación o cambia la cuenta activa en otra pestaña o ventana, puede suscribirse a los LOGIN_SUCCESSeventos , LOGOUT_SUCCESSy ACTIVE_ACCOUNT_CHANGED .
- En el caso de las adiciones y eliminaciones de cuentas, la carga será el
AccountInfoobjeto que se agregó o quitó. - En el caso de las actualizaciones de cuentas activas, no habrá ninguna carga
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
}
});
Tabla de eventos
Estos son los eventos emitidos actualmente por msal-browser.
| Tipo de evento | Description | Tipo de interacción | Carga útil | Error |
|---|---|---|---|---|
LOGIN_START |
Se llama a LoginPopup o loginRedirect |
Popup o Redirect |
PopupRequest o RedirectRequest | |
LOGIN_SUCCESS |
Se ha iniciado sesión correctamente |
Popup o Redirect |
AccountInfo | |
LOGIN_FAILURE |
Error al iniciar sesión |
Popup o Redirect |
AuthError o Error | |
ACQUIRE_TOKEN_START |
Se llama a AcquireTokenPopup o acquireTokenRedirect o acquireTokenSilent. |
Popup, Redirect o Silent |
PopupRequest o RedirectRequest o SilentRequest | |
ACQUIRE_TOKEN_SUCCESS |
Token adquirido correctamente desde la memoria caché o la red |
Popup, Redirect o Silent |
AuthenticationResult | |
ACQUIRE_TOKEN_FAILURE |
Error al adquirir el token |
Popup, Redirect o Silent |
AuthError o Error | |
ACQUIRE_TOKEN_NETWORK_START |
Inicio de la adquisición del token desde la red | Silent |
||
SSO_SILENT_START |
API SsoSilent llamada | Silent |
SsoSilentRequest | |
SSO_SILENT_SUCCESS |
SsoSilent se realizó correctamente | Silent |
AuthenticationResult | |
SSO_SILENT_FAILURE |
Error de SsoSilent | Silent |
AuthError o Error | |
HANDLE_REDIRECT_START |
HandleRedirectPromise llamado | Redirect |
||
HANDLE_REDIRECT_END |
HandleRedirectPromise finalizado | Redirect |
||
LOGOUT_START |
Cierre de sesión llamado |
Redirect o Popup |
EndSessionRequest o EndSessionPopupRequest | |
LOGOUT_END |
Cierre de sesión finalizado |
Redirect o Popup |
||
LOGOUT_SUCCESS |
Cierre de sesión correcto |
Redirect o Popup |
EndSessionRequest o EndSessionPopupRequest | |
LOGOUT_FAILURE |
Error de cierre de sesión |
Redirect o Popup |
AuthError o Error | |
ACTIVE_ACCOUNT_CHANGED |
Filtros de cuenta activa en los que se han cambiado en una pestaña o ventana diferente | N/A | N/A | N/A |
INITIALIZE_START |
Inicialización de la función llamada | N/A | N/A | N/A |
INITIALIZE_END |
Inicialización de la función completada | N/A | N/A | N/A |