Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Msal-Browser (@azure/msal-browser) a partir da versão 2.4 fornece agora APIs de eventos disponíveis para os utilizadores da nossa biblioteca principal e bibliotecas de wrappers. Estes eventos estão relacionados com a autenticação e o que a MSAL está a fazer, podendo ser usados em aplicações para atualizar a interface, mostrar mensagens de erro, entre outros.
Como são os eventos
export type EventMessage = {
eventType: EventType;
interactionType: InteractionType | null;
payload: EventPayload;
error: EventError;
timestamp: number;
};
A carga útil e o erro em EventMessage são definidos da seguinte forma:
export type EventPayload = PopupRequest | RedirectRequest | SilentRequest | SsoSilentRequest | EndSessionRequest | AuthenticationResult | PopupEvent | null;
export type EventError = AuthError | Error | null;
Como os eventos são emitidos no msal-browser
O navegador msal tem uma função emitEventprotegida e emite eventos nas principais APIs. Para a lista de eventos atualmente emitidos, consulte a tabela abaixo.
Aqui está um exemplo de como o msal-browser emite um evento com uma carga útil, ou com um erro:
this.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);
this.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);
Como usar a API de eventos
O msal-browser exporta a addEventCallback função que recebe uma função de callback e pode ser usada para processar eventos emitidos.
Aqui está um exemplo de como pode consumir os eventos emitidos na sua aplicação:
const callbackId = msalInstance.addEventCallback((message: EventMessage) => {
// Update UI or interact with EventMessage here
if (message.eventType === EventType.LOGIN_SUCCESS) {
console.log(message.payload);
}
});
Adicionar um callback de evento devolve um id. Este id pode ser usado para remover o callback, se necessário, usando a removeEventCallback função exportada pelo msal-browser:
msalInstance.removeEventCallback(callbackId);
Tratamento de erros
Devido à forma como EventError está definida, o tratamento dos erros emitidos com um evento pode exigir validação de que o erro é do tipo correto antes de aceder a propriedades específicas do erro emitido. O erro pode ser lançado para AuthError ou verificado se é uma instância de AuthError.
Aqui está um exemplo de consumir um evento emitido e lançar o erro:
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
}
}
});
Obter o estado de interação dos eventos
Pode obter o estado atual da interação dos eventos usando a API getInteractionStatusFromEvent :
Aqui está um exemplo de mostrar uma mensagem quando não há interações em andamento:
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);
}
});
Sincronização do estado de login entre separadores e janelas
Se quiser atualizar a sua interface de utilizador quando um utilizador faz login ou sai da sua aplicação ou muda a conta ativa numa aba ou janela diferente, pode subscrever os LOGIN_SUCCESSeventos , LOGOUT_SUCCESS, e ACTIVE_ACCOUNT_CHANGED .
- Para adições e remoções de contas, o payload será o
AccountInfoobjeto que foi adicionado ou removido. - Para atualizações de contas ativas, não haverá carga útil
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
}
});
Tabela de eventos
Estes são os eventos atualmente emitidos pelo msal-browser.
| Tipo de Evento | Description | Tipo de Interação | Carga útil | Erro |
|---|---|---|---|---|
LOGIN_START |
LoginPopup ou loginRedirect chama-se |
Popup ou Redirect |
PopupRequest ou RedirecionaRequest | |
LOGIN_SUCCESS |
Iniciei sessão com sucesso |
Popup ou Redirect |
AccountInfo | |
LOGIN_FAILURE |
Erro ao iniciar sessão |
Popup ou Redirect |
AuthError ou Erro | |
ACQUIRE_TOKEN_START |
AcquireTokenPopup ou acquireTokenRedirect ou acquireTokenSilent é chamado |
Popup ou Redirect ou Silent |
PopupRequest ou RedirecionaRequest ou SilentRequest | |
ACQUIRE_TOKEN_SUCCESS |
Token adquirido com sucesso da cache ou rede |
Popup ou Redirect ou Silent |
AuthenticationResult | |
ACQUIRE_TOKEN_FAILURE |
Erro ao adquirir o token |
Popup ou Redirect ou Silent |
AuthError ou Erro | |
ACQUIRE_TOKEN_NETWORK_START |
Começar a adquirir tokens da rede | Silent |
||
SSO_SILENT_START |
API SsoSilent chamada | Silent |
SsoSilentRequest | |
SSO_SILENT_SUCCESS |
O SsoSilent teve sucesso | Silent |
AuthenticationResult | |
SSO_SILENT_FAILURE |
O SsoSilent falhou | Silent |
AuthError ou Erro | |
HANDLE_REDIRECT_START |
HandleRedirectPromise chamou | Redirect |
||
HANDLE_REDIRECT_END |
HandleRedirectPromise concluído | Redirect |
||
LOGOUT_START |
Logout chamado |
Redirect ou Popup |
EndSessionRequest ou EndSessionPopupRequest | |
LOGOUT_END |
Deslido de sessão concluído |
Redirect ou Popup |
||
LOGOUT_SUCCESS |
Sucesso na saída de logout |
Redirect ou Popup |
EndSessionRequest ou EndSessionPopupRequest | |
LOGOUT_FAILURE |
Falha no encerramento de sessão |
Redirect ou Popup |
AuthError ou Erro | |
ACTIVE_ACCOUNT_CHANGED |
Os filtros da conta ativa foram alterados numa aba ou janela diferente | N/A | N/A | N/A |
INITIALIZE_START |
Inicializar função chamada | N/A | N/A | N/A |
INITIALIZE_END |
Inicializar função concluída | N/A | N/A | N/A |