Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Msal-Browser (@azure/msal-browser) från och med version 2.4 tillhandahåller nu händelse-API:er som är tillgängliga för användare av vårt kärnbibliotek och omslutningsbibliotek. Dessa händelser är relaterade till autentisering och vad MSAL gör och kan användas i program för att uppdatera användargränssnittet, visa felmeddelanden och så vidare.
Hur händelser ser ut
export type EventMessage = {
eventType: EventType;
interactionType: InteractionType | null;
payload: EventPayload;
error: EventError;
timestamp: number;
};
Nyttolasten och felet i EventMessage definieras på följande sätt:
export type EventPayload = PopupRequest | RedirectRequest | SilentRequest | SsoSilentRequest | EndSessionRequest | AuthenticationResult | PopupEvent | null;
export type EventError = AuthError | Error | null;
Så här genereras händelser i msal-browser
Msal-browser har en skyddad funktion emitEventoch genererar händelser i större API:er. Listan över händelser som för närvarande genereras finns i tabellen nedan.
Här är ett exempel på hur msal-browser genererar en händelse med en nyttolast, eller med ett fel:
this.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);
this.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);
Så här använder du händelse-API:et
Msal-browser exporterar funktionen addEventCallback som tar in en återanropsfunktion och kan användas för att bearbeta avgivna händelser.
Här är ett exempel på hur du kan använda de utgivna händelserna i ditt program:
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
// Update UI or interact with EventMessage here
if (message.eventType === EventType.LOGIN_SUCCESS) {
console.log(message.payload);
}
});
Om du lägger till ett händelseåteranrop returneras ett ID. Det här ID:t kan användas för att ta bort återanropet om det behövs med hjälp av funktionen removeEventCallback som exporteras av msal-browser:
msalInstance.removeEventCallback(callbackId);
Hantering av fel
På grund av att sättet EventError har definierats kan hanteringsfel som genereras med en händelse kräva validering av att felet är av rätt typ innan specifika egenskaper för det avgivna felet används. Felet kan omvandlas till AuthError eller kontrolleras att det är en instans av AuthError.
Här är ett exempel på hur du använder en genererad händelse och gjuter felet:
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
}
}
});
Hämta interaktionsstatus från händelser
Du kan hämta aktuell interaktionsstatus från händelser med hjälp av API:et getInteractionStatusFromEvent :
Här är ett exempel på hur du visar ett meddelande när det inte pågår några interaktioner:
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);
}
});
Synkronisera loggat i tillstånd mellan flikar och fönster
Om du vill uppdatera användargränssnittet när en användare loggar in eller ut från din app eller ändrar det aktiva kontot på en annan flik eller ett annat fönster kan du prenumerera LOGIN_SUCCESSpå händelserna , LOGOUT_SUCCESSoch ACTIVE_ACCOUNT_CHANGED .
- För kontotillägg och borttagningar är nyttolasten det
AccountInfoobjekt som lades till eller togs bort. - För aktiva kontouppdateringar kommer det inte att finnas någon nyttolast
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
}
});
Tabell över händelser
Det här är de händelser som för närvarande genereras av msal-browser.
| Händelsetyp | Description | Interaktionstyp | Nyttolast | Error |
|---|---|---|---|---|
LOGIN_START |
LoginPopup eller loginRedirect anropas |
Popup eller Redirect |
PopupRequest eller RedirectRequest | |
LOGIN_SUCCESS |
Har loggat in |
Popup eller Redirect |
AccountInfo | |
LOGIN_FAILURE |
Fel vid inloggning |
Popup eller Redirect |
AuthError eller fel | |
ACQUIRE_TOKEN_START |
AcquireTokenPopup eller acquireTokenRedirect eller acquireTokenSilent anropas |
Popup eller Redirect eller Silent |
PopupRequest eller RedirectRequest eller SilentRequest | |
ACQUIRE_TOKEN_SUCCESS |
Token har hämtats från cacheminnet eller nätverket |
Popup eller Redirect eller Silent |
AuthenticationResult | |
ACQUIRE_TOKEN_FAILURE |
Fel vid anskaffning av token |
Popup eller Redirect eller Silent |
AuthError eller fel | |
ACQUIRE_TOKEN_NETWORK_START |
Börja hämta token från nätverket | Silent |
||
SSO_SILENT_START |
SsoSilent API med namnet | Silent |
SsoSilentRequest | |
SSO_SILENT_SUCCESS |
SsoSilent lyckades | Silent |
AuthenticationResult | |
SSO_SILENT_FAILURE |
SsoSilent misslyckades | Silent |
AuthError eller fel | |
HANDLE_REDIRECT_START |
HandleRedirectPromise anropas | Redirect |
||
HANDLE_REDIRECT_END |
HandleRedirectPromise har slutförts | Redirect |
||
LOGOUT_START |
Utloggning med namnet |
Redirect eller Popup |
EndSessionRequest eller EndSessionPopupRequest | |
LOGOUT_END |
Utloggning har slutförts |
Redirect eller Popup |
||
LOGOUT_SUCCESS |
Utloggning lyckades |
Redirect eller Popup |
EndSessionRequest eller EndSessionPopupRequest | |
LOGOUT_FAILURE |
Utloggning misslyckades |
Redirect eller Popup |
AuthError eller fel | |
ACTIVE_ACCOUNT_CHANGED |
Aktiva kontofilter där ändrades i en annan flik eller ett annat fönster | N/A | N/A | N/A |
INITIALIZE_START |
Initiera funktionen med namnet | N/A | N/A | N/A |
INITIALIZE_END |
Initiera funktionen har slutförts | N/A | N/A | N/A |