useGetIdentity
Ra-core calls authProvider.getIdentity()
to retrieve and display the current logged-in username and avatar. The logic for calling this method is packaged into a custom hook, useGetIdentity
, which you can use in your own code.
Syntax
Section titled “Syntax”useGetIdentity()
calls authProvider.getIdentity()
on mount. It returns an object containing the loading state, the error state, and the identity.
const { data, isPending, error } = useGetIdentity();
Once loaded, the data
object contains the following properties:
const { id, fullName, avatar } = data;
useGetIdentity
uses react-query’s useQuery
hook to call the authProvider
.
Here is an example Edit component, which falls back to a Show component if the record is locked for edition by another user:
import { useGetIdentity, useGetOne } from 'ra-core';
const PostDetail = ({ id }) => { const { data: post, isPending: isPendingPost } = useGetOne('posts', { id }); const { data: identity, isPending: isPendingIdentity } = useGetIdentity(); if (isPendingPost || isPendingIdentity) return <>Loading...</>; if (!post.lockedBy || post.lockedBy === identity.id) { // post isn't locked, or is locked by me return <PostEdit post={post} /> } else { // post is locked by someone else and cannot be edited return <PostShow post={post} /> }}
Refreshing The Identity
Section titled “Refreshing The Identity”If your application contains a form letting the current user update their name and/or avatar, you may want to refresh the identity after the form is submitted. As useGetIdentity
uses react-query’s useQuery
hook to call the authProvider
, you can take advantage of the refetch
function to do so:
const IdentityForm = () => { const { isPending, error, data, refetch } = useGetIdentity(); const [newIdentity, setNewIdentity] = useState('');
if (isPending) return <>Loading</>; if (error) return <>Error</>;
const handleChange = event => { setNewIdentity(event.target.value); };
const handleSubmit = (e) => { e.preventDefault(); if (!newIdentity) return; fetch('/update_identity', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ identity: newIdentity }) }).then(() => { // call authProvider.getIdentity() again and notify the listeners of the result, // including the UserMenu in the AppBar refetch(); }); };
return ( <form onSubmit={handleSubmit}> <input defaultValue={data.fullName} onChange={handleChange} /> <input type="submit" value="Save" /> </form> );};