Skip to main content

LogoutManager

Logs out based on fetch responses. By default this is triggered by 401 (Unauthorized) status responses.

implements

LogoutManager implements Manager

Usage

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

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

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

Custom logout handler

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

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

Use controller.invalidateAll to only clear part of the cache.

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

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(),
];

Members

handleLogout(controller)

By default simply calls controller.resetEntireStore()

This should be sufficient if login state is determined by a user entity existance in the Reactive Data Client store. However, you can override this method via inheritance if more should be done.

shouldLogout(error)

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

Github Example

More Demos