useAuthenticated
This hook checks if the current user is authenticated by calling the authProvider.checkAuth()
method on mount, and redirects to login if the method throws an error.
React-admin uses this hook in page components (e.g., the <Edit>
component) to forbid access to unauthenticated users.
Usage
If you add custom pages, and you want to restrict access to authenticated users, use useAuthenticated()
as follows:
// in src/MyPage.js
import { useAuthenticated } from 'react-admin';
const MyPage = () => {
const { isPending } = useAuthenticated(); // redirects to login if not authenticated
if (isPending) return <div>Checking auth...</div>;
return (
<div>
...
</div>
)
};
export default MyPage;
Since authProvider.checkAuth()
is an asynchronous function, the useAuthenticated
hook returns an object with a isPending
property set to true
while the check is in progress. You can use this property to display a loading indicator until the check is complete.
If you want to render different content depending on the authenticated status, you can use the useAuthState
hook instead.
Parameters
useAuthenticated
accepts an options object as its only argument, with the following properties:
params
: the parameters to pass toauthProvider.checkAuth()
logoutOnFailure
: a boolean indicating whether to callauthProvider.logout
if the check fails. Defaults totrue
.
Additional parameters are passed as options to the useQuery
call. That allows you to add side effects, meta parameters, retryDelay, etc.
The params
option allows you to add authentication logic depending on the context of the call:
const MyPage = () => {
useAuthenticated({ params: { foo: 'bar' } }); // calls authProvider.checkAuth({ foo: 'bar' })
return (
<div>
...
</div>
)
};
Component Version
The <Authenticated>
component wraps the useAuthenticated
hook, renders its child if the user is authenticated, or redirects to login otherwise.
It is useful when you can’t use hooks, for instance because of the rules of hooks.
import { Authenticated } from 'react-admin';
const MyAuthenticatedPage = () => (
<Authenticated>
<MyPage />
</Authenticated>
);