Appearance
Handling the user
object
All of Privy's login methods result in a unified JSON representation of your user.
To get the current user, inspect the user
object returned by the usePrivy
hook:
tsx
const {user} = usePrivy();
Unauthenticated users
For unauthenticated users, the user
object will be null
.
Authenticated users
For authenticated users, you can use the fields:
user.id
to get their Privy DID, which you may use to identify your user on your backenduser.createdAt
to get a JavaScript Date object of when the user was createduser.customMetadata
to retrieve the custom metadata set for a given user
TIP
You can set custom metadata for a user via Privy's backend server SDK and/or API endpoints!
The user
object also contains information about all of the accounts a user has linked with Privy. Use the fields:
user.email
to get the user's email accountuser.phone
to get the user's phone (SMS) numberuser.wallet
to get the user's Ethereum wallet (crypto account)user.smartWallet
to get the user's smart walletuser.google
to get the user's Google accountuser.apple
to get the user's Apple accountuser.twitter
to get the user's Twitter accountuser.discord
to get the user's Discord accountuser.github
to get the user's GitHub accountuser.linkedin
to get the user's LinkedIn accountuser.tiktok
to get the user's TikTok accountuser.farcaster
to get the user's Farcaster accountuser.spotify
to get the user's Spotify accountuser.instagram
to get the user's Instagram accountuser.telegram
to get the user's Telegram account
If a user has not linked an account of a given type, the corresponding field on the user
object will be undefined.
Different account types contain different information about the underlying account. For example, you might use user.wallet.address
to get a user's Ethereum address and user.discord.username
to get a user's Discord username. Check out the SDK Reference to see what data each type contains.
Alternatively, you can also get a list of all the accounts a user has linked with Privy via user.linkedAccounts
. Each account in this list is additionally annotated with a type
field that denotes the type of account ('email', 'phone', 'wallet', etc.).
TIP
Users can have multiple passkeys linked to their account. To find all linked passkeys, use the linkedAccounts
list and filter by passkey
account type.
Below is an example of how you might use the user
object in a minimal user profile:
tsx
import {usePrivy} from '@privy-io/react-auth';
function User() {
const {ready, authenticated, user} = usePrivy();
// Show nothing if user is not authenticated or data is still loading
if (!(ready && authenticated) || !user) {
return null;
}
return (
<div>
<p>User {user.id} has linked the following accounts:</p>
<ul>
<li>Apple: {user.apple ? user.apple.email : 'None'}</li>
<li>Discord: {user.discord ? user.discord.username : 'None'}</li>
<li>Email: {user.email ? user.email.address : 'None'}</li>
<li>Farcaster: {user.farcaster ? user.farcaster.username : 'None'}</li>
<li>GitHub: {user.github ? user.github.username : 'None'}</li>
<li>Google: {user.google ? user.google.email : 'None'}</li>
<li>Instagram: {user.instagram ? user.instagram.username : 'None'}</li>
<li>LinkedIn: {user.linkedin ? user.linkedin.email : 'None'}</li>
<li>Phone: {user.phone ? user.phone.number : 'None'}</li>
<li>Spotify: {user.spotify ? user.spotify.email : 'None'}</li>
<li>Telegram: {user.telegram ? user.telegram.username : 'None'}</li>
<li>TikTok: {user.tiktok ? user.tiktok.email : 'None'}</li>
<li>Twitter: {user.twitter ? user.twitter.username : 'None'}</li>
<li>Wallet: {user.wallet ? user.wallet.address : 'None'}</li>
</ul>
</div>
);
}