Pular para o conteúdo principal

LogoutManager

Faz logout com base nas respostas de fetch. Por padrão, isso é disparado por respostas com status 401 (Unauthorized).

implements

LogoutManager implements Manager

Uso​

index.tsx
import {
DataProvider,
LogoutManager,
getDefaultManagers,
} from '@data-client/react';
import { createRoot } from 'react-dom/client';
import App from './App';

const managers = [new LogoutManager(), ...getDefaultManagers()];

createRoot(document.body).render(
<DataProvider managers={managers}>
<App />
</DataProvider>,
);

Handler de logout personalizado​

import { unAuth } from '../authentication';

const managers = [
new LogoutManager({
handleLogout(controller) {
// call custom unAuth function we defined
unAuth();
// still reset the store
controller.resetEntireStore();
},
}),
...getDefaultManagers(),
];
dica

Use controller.invalidateAll para limpar apenas parte do cache.

import { unAuth } from '../authentication';

const myDomain = 'http://test.com';
const testKey = (key: string) => key.startsWith(`GET ${myDomain}`);

const managers = [
new LogoutManager({
handleLogout(controller) {
// call custom unAuth function we defined
unAuth();
// still reset the store
controller.invalidateAll({ testKey });
},
}),
...getDefaultManagers(),
];

Membros​

handleLogout(controller)​

Por padrão, simplesmente chama controller.resetEntireStore()

Isso deve ser suficiente se o estado de login for determinado pela existência de uma entity de usuário no store do Reactive Data Client. No entanto, você pode sobrescrever este método via herança se mais coisas precisarem ser feitas.

shouldLogout(error)​

protected shouldLogout(error: UnknownError) {
// 401 indicates reauthorization is needed
return error.status === 401;
}

Exemplo do Github​

Explore o exemplo github-app

More Demos