How to store custom user metadata in Neon Auth
Neon Auth allows storing additional user information through three types of metadata fields:
- clientMetadata: Readable and writable from a client.
- serverMetadata: Readable and writable only from a server.
- clientReadOnlyMetadata: Readable from a client, writable only from a server.
Client metadata
You can use the clientMetadata
field to store non-sensitive information that both the client and server can read and write.
await user.update({ clientMetadata: { mailingAddress: '123 Main St', }, }); // On the client: const user = useUser(); console.log(user.clientMetadata);
Server-side metadata
For sensitive information, use the serverMetadata
field. This ensures the data is only accessible and modifiable by the server.
const user = await stackServerApp.getUser(); await user.update({ serverMetadata: { secretInfo: 'This is a secret', }, }); // To read: const user = await stackServerApp.getUser(); console.log(user.serverMetadata);
Client read-only metadata
Use clientReadOnlyMetadata
for data that clients need to read but never modify, such as subscription status.
// On the server: const user = await stackServerApp.getUser(); await user.update({ clientReadOnlyMetadata: { subscriptionPlan: 'premium', }, }); // On the client: const user = useUser(); console.log(user.clientReadOnlyMetadata);